文章目录
前言
1、本文使用Python语言,以淘宝网为例
2、本文将介绍selenium–webdriver库中的ActionChains类,该类提供了模拟鼠标的常用方法,包括单击、双击、悬停、拖动等常用功能
3、前置步骤,需要先安装selenium并导入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common import keys
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()# 使用chrome驱动
driver.maximize_window()# 将窗口最大化
driver.get('https://www.taobao.com/')# 访问被测域名
ActionChains类方法介绍
1.执行所有存储的操作 - perform()
方法
perform(self)
预学习perform()方法,首先要先了解一下ActionChains的执行原理:
当你调用ActionChains中的其他方法时(如:chick(),send_keys()等),是不会立即执行的,而是会将所有的操作按顺序存放在一个队列里,只有当你调用perform()方法时,队列中的时间会依次执行。
所以,在任意的操作链结束之后都要调用 perform()方法
代码如下(示例):
element = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).click(element).perform()# 点击“新款连衣裙”
ActionChains(driver).send_keys('mac').perform()# 输入“mac”
ActionChains(driver).pause(3).perform()# 暂停3秒
2.鼠标单击 - click()
方法
click(self, on_element=None)
on_element=None:鼠标单击的元素,如果没有则单机鼠标当前位置
代码如下(示例):
# 链式写法
driver.find_element(By.LINK_TEXT,'新款连衣裙').click()# 分步式写法
click= driver.find_element(By.LINK_TEXT,'新款连衣裙')# 定位到元素,并赋值给left
action = ActionChains(driver)
action.click(click)# 操作点击的时候传入元素值
action.perform()
3.点击鼠标左键,不松开 - click_and_hold()
方法
click_and_hold(self, on_element=None)
on_element=None:鼠标左击的元素,如果没有则单机鼠标当前位置
代码如下(示例):
left = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).click_and_hold(left).perform()
4.在某个元素位置松开鼠标左键 - release()
方法
release(self, on_element=None)
on_element=None:鼠标按下的元素,如果没有则在当前鼠标位置释放
代码如下(示例):
# 链式写法
left = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).click_and_hold(left).release(left).perform()# 分步式写法
left = driver.find_element(By.LINK_TEXT,'新款连衣裙')
action = ActionChains(driver)
action.click_and_hold(left)# 在left元素上点击鼠标左键不松开
action.release(left)# 在left元素上松开鼠标左键
action.perform()# 执行队列中的时间
5.点击鼠标右键 - context_click()
方法
context_click(self, on_element=None)
on_element=None:鼠标右击的元素,如果没有则右击鼠标当前位置
代码如下(示例):
right = driver.find_element(By.CSS_SELECTOR,'[id="q"]')
ActionChains(driver).context_click(right).perform()
6.双击鼠标左键 - double_click()
方法
double_click(self, on_element=None)
on_element=None:要双击的元素,如果没有则双击鼠标当前位置
代码如下(示例):
double = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).double_click(double).perform()
7.按住鼠标左键将元素拖拽到某个元素然后松开 - drag_and_drop
方法
drag_and_drop(self, source, target)
source:鼠标按下的元素
target:拖拽元素的终点
代码如下(示例):
element = driver.find_element(By.LINK_TEXT,'四件套')
search = driver.find_element(By.CSS_SELECTOR,'#q')
ActionChains(driver).drag_and_drop(element,search).perform()
8.拖拽到某个坐标然后松开 - drag_and_drop_by_offset()
方法
drag_and_drop_by_offset(self, source, xoffset, yoffset)
source:鼠标按下的元素
xoffset:要移动到的x坐标
yoffset:要移动到的y坐标
代码如下(示例):
element = driver.find_element(By.LINK_TEXT,'四件套')
search = driver.find_element(By.CSS_SELECTOR,'#q')print(search.location)# 打印元素坐标
ActionChains(driver).drag_and_drop_by_offset(element,487,174).perform()
9.发送按键不释放(按下某个键盘上的键)- key_down()
方法
key_down(self, value, element=None) # 该方法只可和Control、Alt和Shift一起使用
value:要发送的修改器键(参考keys类)
element:要发送秘钥的元素,如果没有传则像当前聚焦的元素发送一个键
代码如下(示例):
# 使用键盘输入mac后,在按键ctrl+a操作全选,然后释放ctrl键,然后按回车键# 下键盘操作键,需要调用Keys类,如Keys.CONTROL-代表ctrl键,操作键也可以写成uncode编码形式,如'\ue007'-代表enter键
ActionChains(driver).send_keys('mac').key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys('\ue007').perform()
10.释放修改器(松开键盘上的某个键) - key_up()
方法
key_up(self, value, element=None)
value:要发送的修改器键(参考keys类)
element:要发送秘钥的元素,如果没有传则像当前聚焦的元素发送一个键
代码如下(示例):
ActionChains(driver).send_keys('mac').key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys('\ue007').perform()
11.发送某个键到当前焦点的元素 - send_keys()
方法
send_keys(self, *keys_to_send)
*keys_to_send:要发送的内容/按键
代码如下(示例):
ActionChains(driver).send_keys('mac').perform()
12.发送某个键到指定元素 - send_keys_to_element()
方法
send_keys_to_element(self, element, *keys_to_send)
element:要发送内容的的元素
*keys_to_send:要发送的内容/按键
代码如下(示例):
elem = driver.find_element(By.XPATH,'//*[@id="q"]')
ActionChains(driver).send_keys_to_element(elem,'ipad').perform()
13.鼠标移动到某个元素(悬停) - move_to_element()
方法
move_to_element(self, to_element)
to_element:要移动到的元素(中间位置)
代码如下(示例):
element = driver.find_element(By.LINK_TEXT,'四件套')
ActionChains(driver).move_to_element(element).perform()# 写法2# 找到需要悬停的页面元素
link1 = self.driver.find_element(By.XPATH,'xx.png"]')# 找到第二个需要悬停的页面元素
link2 = self.driver.find_element(By.XPATH,'//span[text()="小白"]')# 模拟鼠标悬停操作
ActionChains(self.driver).move_to_element(link1).perform()
time.sleep(3)# 在悬浮框中点击元素
ActionChains(self.driver).click(link2).perform()
time.sleep(3)
14.将鼠标移动到与当前鼠标位置的偏移位置 - move_by_offset()
方法
move_by_offset(self, xoffset, yoffset)
xoffset:要移动到的X偏移量,以正整数或负整数的形式
yoffset:要移动到的Y偏移量,为正整数或负整数
代码如下(示例):
15.移动到距某个元素(左上角坐标)多少距离的位置 - move_to_element_with_offset()
方法
move_to_element_with_offset(self, to_element, xoffset, yoffset)
to_element:要移动到的元素
xoffset:要移动到的X偏移
yoffset:要移动到的Y偏移
代码如下(示例):
16.将滚轮滚动信息发送到浏览器进行处理 - scroll()
方法
scroll(self, x: int, y: int, delta_x: int, delta_y: int, duration: int = 0, origin: str = “viewport”)
x:起始x坐标
y:起始y坐标
delta_x:鼠标在x轴上滚动的距离
delta_y:鼠标在y轴上滚动的距离
代码如下(示例):
# 这里可以使用chrome的插件page ruler来获取坐标位置
ActionChains(driver).scroll(1518,43,0,1000,300).perform()
17.在指定的持续时间(秒)内暂停所有输入 - pause()
方法
pause(self, seconds)
seconds:暂停输入的时间
代码如下(示例):
# 输入mac后,等待3秒,然后输入ipad
ActionChains(driver).send_keys('mac').pause(3).send_keys_to_element(elem,'ipad').perform()
18.清除已存储在本地和远程端的操作 - reset_actions()
方法
reset_actions(self)
代码如下(示例):
ActionChains(driver).send_keys('iphone').perform().reset_actions()
版权归原作者 XiYang- 所有, 如有侵权,请联系我们删除。