1、需求:需要模拟鼠标操作才能进行的情况,比如单击、双击、鼠标右键、拖拽等操作
2、解决办法:selenium 提供了一个类来处理这类事件:selenium.webdriver.common.action_chains.ActionChains(driver)
3、脚本:from selenium.webdriver.common.action_chains import AchtionChains
4、原理:调用ActionChains不会立即执行,而是将所有的操作顺序放在一个队列里,当调用perform()方法时,队列中的事件会被依次执行
5、写法:支持链式写法和分步写法
ActionChains(driver).click(ele).perform()
6、键盘和鼠标方法列表:
(1)perform()执行列表中所有的操作
(2)click(on_element=None) 单击鼠标左键
(3)context_click(on_element=None) 单击鼠标右键
(4)double_click(on_element=None) 双击鼠标左键
(5)move_to_element(to_element) 移动鼠标到某个元素上
(6)ele.send_kends(keys_to_send) 发送某个词到当前焦点的元素
7、不常用的方法列表:
(1)click_and_hold(on_element=None) 点击鼠标左键不松开
(2)release(on_element=None) 在某个元素位置松开鼠标左键
(3)key_down(value,element=None) 按下键盘上的某个键
(4)key_up(value,element=None) 松开键盘上的某个键
(5)drag_and_drop(source,target) 拖拽到某个元素然后松开
(6)drag_and_drop_by_offset(source,xoffset,yoffset) 拖拽到某个坐标然后松开
(7)move_by_offset(xoffset,yoffset) 鼠标从当前位置移动到某个坐标
(8)move_to_element_with_offset(to_element,xoffset,yoffset) 移动到距某个元素(左上角坐标)多少距离的位置
例子:
# coding utf-8
from selenium import webdriver
# 导入sleep这个模块
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
# 打开淘宝首页
url = "https://www.taobao.com/"
driver = webdriver.Firefox()
driver.get(url)
# 睡眠时间3秒,看的效果明显点
sleep(3)
# 通过find_element_by_css_selector定位到“女装”
menu_element = driver.find_element_by_css_selector("li.J_Cat:nth-child(1) > a:nth-child(1)")
# 把鼠标移到女装上
ActionChains(driver).move_to_element(menu_element).perform()
sleep(10)
#sreach_window=driver.current_window_handle
# 选择女装中的“羽绒棉服”
driver.find_element_by_xpath("/html/body/div[4]/div[1]/div[1]/div[1]/div/div/div[1]/div[1]/div[1]/p/a[3]").click()
注:一定要有睡眠时间,不然会由于资源没有加载完导致定位不到我要定位的元素。这个问题困扰我很久