首先导入ActionChains类,该类可以完成鼠标移动,鼠标点击事件,键盘输入、内容菜单交互等交互行为。
from selenium.webdriver.common.action_chains import ActionChains
操作语法:
第一步:初始化ActionChains类(动作链条):action = ActionChains(driver)
第二步:找到要操作的元素:element = driver.find_element(by='xx', value='xx')
第三步:调用鼠标操作方法:action.move_to_element(element)
第四部:执行鼠标操作方法:action.perform()
在实际调用ActionChains类的方法时,不会立即执行鼠标操作,而是会将所有的操作顺序存放在一个队列里,最终调用perform()方法,队列中的操作会依次进行。
( ActionChains 类提供了对动作的链式操作,也就是可以生成一个操作的队列,将复杂的操作过程分解成单个操作,然后组合起来一次性执行)
(在 ActionChains 类中所有提供的鼠标事件方法,在调用的时候所有的行为都存储在 ActionChains 对象中,而 perform() 方法就是真正去执行所有的鼠标事件。)
常用方法:
1、点击鼠标左键----click(element)
action = ActionChains(driver)
element = driver.find_element('class name', 'hot-refresh-text')
action.click(element).perform()
简写为:
driver.find_element('class name', 'hot-refresh-text').click()
2、鼠标移动到元素上-------move_to_element(element)
执行操作:
ActionChains(driver).move_to_element(driver.find_element('id', 's-usersetting-top')).perform()
# 移动鼠标到元素上
3、点击鼠标左键,不松开----click_and_hold(element)
执行操作:
action = ActionChains(driver)
element = driver.find_element('class name', 'hot-refresh-text')
action.click_and_hold(element).perform()
4、点击鼠标右键----context_click(element)
对于点击鼠标右键,如果弹出的是浏览器默认的菜单,Selenium没有提供操作菜单选项的方法; 如果是自定义的右键菜单,则可以通过元素定位来操作菜单中的选项。
action = ActionChains(driver)
element = driver.find_element('xx', 'xx')
action.context_click(element).perform()
5、双击鼠标左键----double_click(element)
action = ActionChains(driver)
element = driver.find_element('xx', 'xx')
action.double_click(element).perform()
6、drag_and_drop(source, target) :拖拽到某个元素然后松开
说明:模拟鼠标拖动动作,选定拖动源元素释放到目标元素后鼠标松开。
- 初始化类:action = ActionChains(driver)
- 源元素:source = driver.find_element(by='xx', value='xx')
- 目标元素 :target = driver.find_element(by='xx', value='xx')
- 调用方法 :action.drag_and_drop(source, target).perform()
action = ActionChains(driver)
source = driver.find_element('xx', 'xx')
target = driver.find_element('xx', 'xx')
action.drag_and_drop(source, target).perform()
7、执行鼠标操作-----perform()
其他方法:
1、清除已在队列中的鼠标操作命令----reset_actions()
2、拖拽到某个坐标后松开----drag_and_drop_by_offset(source, x, y)
源元素:source = driver.find_element(by='xx', value='xx')
3、按下某个键盘上的键----key_down(value, element)
4、松开某个键----key_down(value, element)
5、鼠标从当前位置,移动到某个坐标----move_by_offset(x, y)
6、鼠标移动到距离某个元素多少距离的位置----move_to_element_with_offset(element, x, y)
7、在元素上释放按住的鼠标按钮----release(element)
说明:在某个元素位置松开鼠标左键,与 click_and_hold(element) 点击鼠标左键不松开结合使用。(如果有鼠标按下的操作,那么需要通过 release() 方法释放鼠标)
8、暂停操作-----pause(seconds)
结合使用,比如:鼠标移动到某元素上悬停的时间。(暂停所有动作,相当于等待,用于链式操作过程中的等待)