参考:Selenium之动作链(ActionChains) - liangxb - 博客园
目录
前序工作
导入ActionChains,传入一个driver对象
from selenium import webdriver
from selenium.webdriver import ActionChains --导入ActionChains
from selenium.webdriver.common.by import By
wd = webdriver.Chrome() --创建driver对象
action = ActionChains(wd) --传入driver对象
调用方法
- 调用ActionChains的方法时,不会立即执行
- 而是会将所有的操作按顺序存放在一个队列里,调用perform()方法时,队列中的事件会依次执行。
链式写法
#链式写法
#定位元素
element1 = driver.find_element_by_css_selector(".nav")
element2 = driver.find_element_by_css_selector(".nav #submenu1")
#---------
ActionChains(driver).move_to_element(element1).click(element2).perform()
分步写法
#分步写法
#定位元素
element1 = driver.find_element_by_css_selector(".nav")
element2 = driver.find_element_by_css_selector(".nav #submenu1")
#----------
actions = ActionChains(driver)
actions.move_to_element(element1)
actions.click(element2)
actions.perform()
两种写法本质是一样的,ActionChains都会按照顺序执行所有的操作。
ActionChains方法
执行操作
perform() | 执行链中的所有动作 |
鼠标点击
click(on_element=None) | 单击鼠标左键 |
click_and_hold(on_element=None) | 点击鼠标左键,不松开 |
context_click(on_element=None) | 点击鼠标右键 |
double_click(on_element=None) | 双击鼠标左键 |
鼠标移动
move_by_offset(xoffset, yoffset) | 鼠标从当前位置移动到某个坐标 |
move_to_element(to_element) | 鼠标移动到某个元素 |
move_to_element_with_offset(to_element, xoffset, yoffset) | 移动到距某个元素(左上角坐标)多少距离的位置 |
release(on_element=None) | 在某个元素位置松开鼠标左键 |
元素拖拽
1.拖拽操作
drag_and_drop(source, target) | 拖拽到某个元素然后松开 |
drag_and_drop_by_offset(source, xoffset, yoffset) | 拖拽到某个坐标然后松开 |
2.长按+任意一种移动+松开
click_and_hold(on_element=None) | 点击鼠标左键,不松开 |
move_by_offset(xoffset, yoffset) | 鼠标从当前位置移动到某个坐标 |
move_to_element(to_element) | 鼠标移动到某个元素 |
move_to_element_with_offset(to_element, xoffset, yoffset) | 移动到距某个元素(左上角坐标)多少距离的位置 |
release(on_element=None) | 在某个元素位置松开鼠标左键 |
键盘按键
key_up(value, element=None) | 松开某个键 |
send_keys(*keys_to_send) | 发送某个键到当前焦点的元素 |
send_keys_to_element(element, *keys_to_send) | 发送某个键到指定元素 |