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()
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。
版权归原作者 科雷learning 所有, 如有侵权,请联系我们删除。