鼠标、键盘事件是我们利用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 关闭