【学习笔记】ActionChains 动作链
学习说明:
本帖的学习目为是详细了解ActionChains的特性和用法,并知道应该何时使用ActionChains。
第一部分:基础介绍
ActionsChains是Selenium中的一个功能模块,它提供了模拟用户输入和复杂交互的能力,包括鼠标移动、点击、拖放、键盘输入等。它的主要功能分为两部分,分别是动作链和输入器控制。
在使用前我们要导入webdriver和ActionChains包,然后我们需要一个WebDriver对象,并用它来创建一个ActionsChains对象:
# 导入webdrive
from selenium import webdriver
# 导入ActionChains
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Edge()
driver.get('https://example.com') # 打开一个网页
# 创建一个ActionsChains对象
actions = ActionChains(driver)
第二部分:动作链
说明:当我们调用ActionChains的方法时,操作不会立即执行,而是会将所有的操作按顺序存放在一个队列里,只有当调用perform()方法时,队列中的操作才会依次执行,所以被称为动作链
ActionsChains有两种调用方法:
链式调用:
ActionChains(driver).Controls1(value).Controls2(value).perform()
分布式调用:
actions=ActionChains(driver)
actions.Controls1(value)
actionsControls2(value)
actions.perform()
动作链中的结点命令
perform() # 提交队列中的所有操作
所有操作都需要通过 perform() 才会实际提交到浏览器。
rest_actions() # 清空队列中的操作
将队列中已存储的操作清空。
pause(seconds) # 暂停所有动作
相当于等待,用于链式操作过程中的等待。
第三部分:输入器控制
鼠标部分
单击操作
说明:
click(on_element=None)
单击鼠标左键;
on_element
指被点击的元素,如果该参数为None,将左键单击当前鼠标所在位置。
# 找到要单击的元素
element = driver.find_element(By.ID,'click-id')
# 单击元素
actions.click(element).perform()
双击操作
说明:
double_click(on_element=None)
双击鼠标左键;
on_element
指被点击的元素,如果该参数为None,将双击击当前鼠标所在位置。
element = driver.find_element (By.ID,'double-click-id')
# 双击元素
actions.double_click(element).perform()
长按操作
说明:
click_and_hold(on_element=None)
长按鼠标左键;
on_element
指被点击的元素,如果该参数为None,将长按当前鼠标所在位置。
element = driver.find_element (By.ID,' click-and-hold-id')
# 长按元素
actions.click_and_hold (element).perform()
右击操作
说明:
context_click(on_element=None)
单击鼠标右键;
on_element
指被点击的元素,如果该参数为None,将右键单击当前鼠标所在位置。
element = driver.find_element (By.ID,'right-click-id')
# 右击元素
actions.context_click(element).perform()
鼠标悬停
说明:
move_to_element(to_element)
鼠标悬停到某个元素;
to_element
鼠标悬停到该元素上。
element = driver.find_element (By.ID, 'hover-id')
# 鼠标悬停
actions.move_to_element(element).perform()
拖放操作
说明:
drag_and_drop(source, target)
把元素拖动到另一个元素后松开;
Source
鼠标拖动的元素(元素定位),
Target
鼠标释放的目标元素(元素定位)。
drag_and_drop_by_offset(source, xoffset, yoffset)
把元素拖到某个坐标然后松开;
Source
鼠标拖动的元素(元素定位),
xoffset
x轴坐标,
yoffset
y轴坐标。
move_by_offset(xoffset, yoffset)
鼠标从当前位置移动到某个坐标;
xoffset
x轴坐标,
yoffset
y轴坐标。
# 拖放源元素id
source = driver.find_element (By.ID, 'drag-source-id')
# 拖放目的地元素id
target = driver.find_element (By.ID, 'drag-target-id')
# 拖放操作
actions.drag_and_drop(source,
target).perform()
鼠标移动
说明:
move_to_element_with_offset(to_element, xoffset, yoffset)
鼠标移动到距某个元素(左上角坐标)多少距离的位置;
to_element
指鼠标移动后停止到该元素上,
xoffset
x轴坐标,
yoffset
y轴坐标。
鼠标释放
说明:
release(on_element=None)
在某个元素位置松开鼠标左键;
on_element
被鼠标释放的元素,如果该参数为None,将立即释放。
键盘部分
按键
说明:
actions.key_down(Keys.value)
按下指定按键;
value
按键名,可同时按下多个按键。
actions.key_up(Keys.value)`释放指定按键;
value
按键名,可同时传入多个。
from selenium.webdriver.common.keys
import Keys
element = driver.find_element(By.ID,'input-id')
# 选择所有文本
actions.click(element). key_down(Keys.CONTROL,'a'). key_up(Keys.CONTROL, 'a').perform()
键入
说明:
send_keys(*keys_to_send)
发送单个或多个参数到当前焦点的元素;
*keys_to_send
可变参数,可同时传入多个参数,如send_keys("a", "b")。
send_keys_to_element(element, *keys_to_send)
发送单个或多个参数到指定元素;
element
定位的元素,
*keys_to_send
可变参数,可同时传入多个参数。
element =driver.find_element_by_id('input-id')
actions.click(element).send_keys('helloworld').perform() # 输入文本
滚动部分
注意:此部分目前只有Chromium生效。
滚动到指定元素
actions.scroll_to_element(iframe)
窗口会滚动,使指定元素的底部位于屏幕底部;
iframe
元素路径。
直接滚动指定数值
actions.scroll_by_amount(delta_x, delta_y)
从当前焦点直接滚动;
delta_x
x轴滚动量,正数为向右侧滚动,负数为向左侧滚动;
delta_y
y轴滚动量,正数为向下方滚动,负数为向上方滚动。
大佬 教我技术
你倒是跟着帖子练啊
能不能教教Java
我Java学的像shi,实在没脸教别人哇
大佬教我
写一个自动玩游戏的脚本
这个不如用js写,selenium会占用本地资源