selenium:ActionChains类模拟鼠标和键盘操作(6)

selenium包中提供了ActionChains类,主要用于鼠标和键盘的一些操作,比如鼠标移动,鼠标按键,或者是悬停和拖放等;模拟键盘按键输入,比如按住control+C键等。

使用时先导入该类:

from selenium.webdriver import ActionChains

ActionChains类的方法介绍

ActionChains类常用方法

|-----------------------------|---------------------------------------------------------------------------------|
| 函数 | 功能 |
| move_to_element | 鼠标移动到某个元素位置 |
| move_to_element_with_offset | 鼠标移动到离某个元素距离多少的位置 |
| move_by_offset | 移动鼠标到某个坐标 |
| click | 单击鼠标左键 |
| click_and_hold | 单击鼠标左键不松开 |
| double_click | 双击鼠标左键 |
| context_click | 点击鼠标右键 |
| drag_and_drop | 拖拽到某个元素然后松开 |
| drag_and_drop_by_offset | 拖拽到某个坐标然后松开 |
| key_down | 按下某个键盘上的按键; 键盘输入通常用到如下Keys类中的属性 from selenium.webdriver.common.keys import Keys |
| key_up | 松开某个按键 |
| first_selected_option | 第一个选择的选项 |
| send_keys | 可发送多个键盘上的按键到当前焦点位置,循环的模拟输入按键和松开按键 ; 上面提到的send_keys模拟文本输入,功能有所不同。 |
| send_keys_to_element | 发送某个按键到某个元素 |
| pause | 暂停执行一段时间 |
| release | 在元素上释放按住的鼠标按钮 |
| reset_actions | 清除已经储存的上述方法中的动作 |
| perform | 执行已经存储的上述方法中的动作。想要执行上述方法,最后需要执行该函数来生效。 |

方法执行类似如下:移动鼠标到某个定位到的元素,然后右键点击,最后加上perform函数完成整个动作(actchain_ins为ActionChains类初始化的实例对象)。

actchain_ins.move_to_element(driver.find_element(By.ID,'su')).context_click().perform()

示例:打开百度网页,将鼠标定位到'更多'展示隐藏的内容

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
driver.maximize_window()
sleep(2)
#初始化ActionChains类
actchain_ins = webdriver.ActionChains(driver)
#移动到'更多'元素的位置
actchain_ins.move_to_element(driver.find_element(By.NAME,'tj_briicon')).perform()
actchain_ins.pause(5).perform()

执行后展示如图:

示例:打开百度输入用户名和密码进行登录(表单操作)

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
driver.maximize_window()
sleep(1)
#初始化ActionChains类
actchain_ins = webdriver.ActionChains(driver)
#模拟鼠标点击登录按钮
actchain_ins.move_to_element(driver.find_element(By.ID,'s-top-loginbtn')).click().perform()
sleep(1)
#输入用户名
driver.find_element(By.ID,'TANGRAM__PSP_11__userName').send_keys('*******')
sleep(1)
#输入密码
driver.find_element(By.ID,'TANGRAM__PSP_11__password').send_keys('*******')
sleep(1)
#模拟鼠标点击'阅读并接受'前面的选框
actchain_ins.move_to_element(driver.find_element(By.ID,'TANGRAM__PSP_11__isAgree')).click().perform()
sleep(1)
#模拟鼠标点击登录
actchain_ins.move_to_element(driver.find_element(By.ID,'TANGRAM__PSP_11__submit')).click().perform()
sleep(3)

程序执行后会自动输入用户和密码,点击登录,如下图:

示例:打开百度后在百度一下按钮处点击鼠标右键

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
driver.maximize_window()
sleep(2)
#ActionChains初始化
actchain_ins = webdriver.ActionChains(driver)
#在百度一下按钮处,点击右键
actchain_ins.move_to_element(driver.find_element(By.ID,'su')).context_click().perform()

示例:打开百度输入要搜索的内容后发送键盘键进行剪切和粘贴

键盘输入使用的是如下Keys类,使用前我们先导入

from selenium.webdriver.common.keys import Keys

Keys类有很多键盘的按键属性:

主要使用方法:通过key_down按下某个按键,通过send_keys发送某个按键,然后key_up松开某个按键。比如下面这个按住苹果电脑上的COMMAND+A键,然后再松开COMMAND键,完成全选动作。

actchain_ins.key_down(Keys.COMAND).send_keys('A').key_up(Keys.COMMAND).perform()

测试代码如下:输入搜索内容后,全选文本后,剪切然后再粘贴。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
driver.maximize_window()
sleep(2)
#初始化
actchain_ins = webdriver.ActionChains(driver)
driver.find_element(By.ID,'kw').send_keys('python')
#control+A复制 苹果电脑是COMMAND键
actchain_ins.key_down(Keys.COMMAND).send_keys('A').key_up(Keys.COMMAND).perform()
sleep(1)
#control+X剪切
actchain_ins.key_down(Keys.COMMAND).send_keys('X').key_up(Keys.COMMAND).perform()
sleep(1)
#control+V粘贴
actchain_ins.key_down(Keys.COMMAND).send_keys('V').key_up(Keys.COMMAND).perform()
sleep(20)

执行后,录制的视频如下:

剪切粘贴

示例:使用ActionChains 类模拟鼠标滚轮操作

使用函数ActionChains.send_keys发送按键Keys.PAGE_DOWN往下滑动页面,发送按键Keys.PAGE_UP往上滑动页面。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.toutiao.com/")
driver.maximize_window()
sleep(6)
actions = webdriver.ActionChains(driver)
# 向下翻页
actions.send_keys(Keys.PAGE_DOWN).perform()
# 向上翻页
actions.send_keys(Keys.PAGE_UP).perform()

共勉: 东汉·班固《汉书·枚乘传》:"泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。"

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

相关推荐
api茶飘香1 小时前
淘宝商品评论API返回值中的品牌忠诚度评价
开发语言·python·django·flask·virtualenv·pygame·tornado
CV-King2 小时前
openmmlab实现图像超分辨率重构
人工智能·python·深度学习·opencv·计算机视觉·重构
AI原吾4 小时前
探索未来:picows,Python的AI新宠
开发语言·python·ai·picows
视觉人机器视觉4 小时前
爸妈总说着学门技术,学机器视觉技术确实是一条踏实的生活道路,这条路你走得下去走得通吗?
人工智能·算法·计算机视觉·c#·自动化
Mr.D学长5 小时前
毕业设计 大数据电影数据分析与可视化系统
python·毕业设计·毕设
宇宙第一小趴菜5 小时前
Python编程:创意爱心表白代码集
python
攻城狮_Dream6 小时前
有哪些推荐的Python学习资源?
开发语言·python·学习
周周写不完的代码6 小时前
JUC-线程池
开发语言·网络·python
qmsb996 小时前
甲虫身体图像分割系统源码&数据集分享
python