鼠标、键盘事件是我们利用Selenium
操控浏览器的重要交互手段,主要由selenium\webdriver\common\action_chains.py
中的ActionChains
类实现。该类通过webdriver
包对外暴露,即可使用from selenium.webdriver import 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
,在当前位置按键。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
暂停秒数。