当前位置: 首页 >> 观点
世界今日讯!Selenium3 Python WebDriver API源码探析(10):动作链(ActionChains):鼠标事件和
来源:哔哩哔哩     时间:2023-05-07 01:54:44

鼠标、键盘事件是我们利用Selenium操控浏览器的重要交互手段,主要由selenium\webdriver\common\action_chains.py中的ActionChains类实现。该类通过webdriver包对外暴露,即可使用from selenium.webdriver import ActionChains导入ActionChains类。


(资料图)

动作链(ActionChains)原理

动作链是一种低级交互方法,如鼠标移动、鼠标按钮操作、按键按下和上下文菜单交互。动作链对于复杂动作非常有效,比如悬停和拖放。

ActionChains类提供了两类方法:

动作链基础方法

各种动作方法

ActionChains类在实例化时,生成了两个类属性,一个为_driver,即WebDriver实例,另一个为_actions,初始为空列表,随后ActionChains实例在调用其他动作方法时,会先把需要执行的动作存储在_actions中,当ActionChains实例调用perform()方法时,才会真正执行动作。

动作链的调用模式有两种:

链式语法

menu = driver.find_element_by_css_selector(".nav")

hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

命令队列

menu = driver.find_element_by_css_selector(".nav")

hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

actions = ActionChains(driver)

actions.move_to_element(menu)

actions.click(hidden_submenu)

actions.perform()

ActionChains类动作链基础方法

perform()方法

作用:依次执行动作链中的每个动作。

reset_actions()方法

作用:清空待执行的动作链。

ActionChains类鼠标操作方法

move_to_element方法

作用:将鼠标从当前位置移动至某元素中心位置。

方法签名:ActionChains(driver).move_to_element(to_element)

参数:on_element,鼠标移动的目标元素。

click方法

作用:将鼠标移动至给定元素,然后点击该元素。

方法签名:ActionChains(driver).click(on_element=None)

参数:on_element,即将点击的元素,如果参数为None,点击鼠标当前位置。

原理:先执行move_to_element方法,再点击元素。

click_and_hold方法

作用:将鼠标移动至给定元素,然后在给定元素中间单击(不释放)。

方法签名:ActionChains(driver).click_and_hold(on_element=None)

参数:on_element,鼠标按下的元素,如果参数为None,点击鼠标当前位置。

context_click方法

作用:将鼠标移动至给定元素,然后用鼠标右键单击该元素。

方法签名:ActionChains(driver).context_click(on_element=None)

参数:on_element,鼠标右键单击的元素,如果参数为None,鼠标右键点击当前位置。

原理:先执行move_to_element方法,再右键点击元素。

double_click方法

作用:将鼠标移动至给定元素,然后用鼠标双击该元素。

方法签名:ActionChains(driver).double_click(on_element=None)

参数:on_element,鼠标双击的元素,如果参数为None,鼠标双击当前位置。

原理:先执行move_to_element方法,再双击元素。

release方法

作用:释放按在某元素上的鼠标。

方法签名:ActionChains(driver).release(on_element=None)

参数:on_element,释放鼠标的元素,如果参数为None,在当前位置释放鼠标。

move_by_offset方法

作用:将鼠标从当前位置按偏移量移动鼠标。

方法签名:ActionChains(driver).move_by_offset(xoffset, yoffset)

参数:

xoffset:需要移动的X偏移量。正负整数。

yoffset:需要移动的Y偏移量。正负整数。

move_to_element_with_offset方法

作用:将鼠标从当前位置移动至某元素中心位置(按偏移量移动,偏移量相对于元素的左上角)。

方法签名:ActionChains(driver).move_to_element_with_offset(to_element, xoffset, yoffset)

参数:

to_element:鼠标移动的目标元素

xoffset:需要移动的X偏移量

yoffset:需要移动的Y偏移量

drag_and_drop方法

作用:拖放元素(按下鼠标左键拖动源元素至目标元素时释放鼠标左键)。

方法签名:ActionChains(driver).drag_and_drop(source, target)

参数:

source:鼠标拖动的元素

target:鼠标释放的元素

原理:先click_and_hold(source),再release(target)

drag_and_drop_by_offset方法

作用:拖放元素,类似于 drag_and_drop方法,只不过将元素拖放某些偏移量。

方法签名:ActionChains(driver).drag_and_drop_by_offset(source, xoffset, yoffset)

参数:

source:鼠标拖动的元素

xoffset:需要移动的X偏移量

yoffset:需要移动的Y偏移量

原理:先click_and_hold(source),再move_by_offset(xoffset, yoffset),最后release()

ActionChains类键盘操作方法

Selenium不但可以输入实体字符,还可以输入组合键。selenium\webdriver\common\keys.py中的Keys类映射了大多数修饰键。可使用from selenium.webdriver.common.keys import Keys导入Keys类。

key_down方法

作用:按下某个键(不释放),应当只用于修饰键(CTRL、ALT、SHIFT)。

方法签名:ActionChains(driver).key_down(value, element=None)

参数:

value:按下的修饰键。

element:按键的元素,如果参数为None,在当前位置按键。

key_up方法

作用:释放某个修饰键。

方法签名:ActionChains(driver).key_up(value, element=None)

参数:

value:按下的修饰键。

element:按键的元素,如果参数为None,在当前位置按键。

案例:按下ctrl+c

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

send_keys方法

作用:向当前元素输入内容。

方法签名:ActionChains(driver).send_keys(*keys_to_send)

参数: keys_to_send:即将发送的内容。

send_keys_to_element方法

作用:向某元素输入内容。

方法签名:ActionChains(driver).send_keys_to_element(element, *keys_to_send)

参数:

element:给定元素。

keys_to_send:即将发送的内容。

原理:先click(element),再send_keys(*keys_to_send)

pause方法

作用:按秒数暂停所有输入。

方法签名:ActionChains(driver).pause(seconds)

参数:seconds暂停秒数。

标签:

广告

X 关闭

广告

X 关闭