1-Selenium - 鼠标事件
前言
在WebDriver
中,关于鼠标相关操作的方法都封装在ActionChains
类中。
我们来看看ActionChains
类都提供了哪些鼠标操作的方法:
Method | Description |
---|---|
click(on_element=None) | 鼠标左键单击 |
click_and_hold(on_element=None) | 鼠标左键单击,但不松开 |
context_click(on_element=None) | 鼠标右键单击 |
double_click(on_element=None) | 鼠标左键双击 |
drag_and_drop(source, target) | 鼠标左键单击不松开,移动到指定元素后松开(即拖拽 ) |
drag_and_drop_by_offset(source, xoffset, yoffset) | 鼠标左键单击不松开,移动到指定坐标后松开 |
move_by_offset(xoffset, yoffset) | 鼠标移动到某个坐标 |
move_to_element(to_element) | 鼠标移动到某个元素 |
move_to_element_with_offset(to_element, xoffset, yoffset) | 鼠标移动到距离某个元素的某个距离 |
pause(seconds) | 暂停输入 |
release(on_element=None) | 在某个元素松开鼠标左键 |
send_keys(*keys_to_send) | 在当前元素中输入值 |
send_keys_to_element(element, *keys_to_send) | 给某个元素输入值 |
perform() | 相应存储的动作 |
reset_actions() | 清除所有已存储的动作 |
单击、双击、右击
来看看简单的鼠标左键单击、双击、鼠标右键单击。
"""
通过 ActionChains 完成 单击、双击、右击
练习网站:http://sahitest.com/demo/clicks.htm
"""
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
try:
driver.get('http://sahitest.com/demo/clicks.htm')
# 单击
sleep(2)
btn1 = driver.find_element_by_xpath('/html/body/form/input[3]')
ActionChains(driver).click(btn1).perform()
# 左键双击
sleep(2)
btn2 = driver.find_element_by_xpath('/html/body/form/input[2]')
ActionChains(driver).double_click(btn2).perform()
# 鼠标右键单击
sleep(2)
btn3 = driver.find_element_by_xpath('/html/body/form/input[4]')
ActionChains(driver).context_click(btn3).perform()
finally:
sleep(5)
driver.quit()
拖动:drag_and_drop
所谓的拖动,也就是鼠标左键点击标签不松开,直到拖动到指定标签后再松开。
来个jqueryui
的示例。
'''
https://jqueryui.com/droppable/
'''
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get('https://jqueryui.com/droppable/')
time.sleep(3)
# 因为该页面中,有iframe标签,所以先切换
frame = driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(frame)
# 获取第一个元素
div1 = driver.find_element_by_id('draggable')
# 获取第二个元素
div2 = driver.find_element_by_id('droppable')
# 拖拽
ActionChains(driver).drag_and_drop(div1, div2).perform()
time.sleep(5)
driver.quit()
再来玩个游戏。
示例代码如下:
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
# 获取webdriver实例
browser = webdriver.Chrome()
# 访问URL
browser.get('http://www.jq22.com/demo/pintu20151229/')
# 点击开始按钮,开始游戏
time.sleep(1)
start = browser.find_element_by_id('start')
ActionChains(browser).move_to_element(start).click().perform()
# 准备拖动,首先要找到开始和结束的两个标签
time.sleep(2)
img1 = browser.find_element_by_xpath('//*[@id="container"]/div[18]') # 选中开始标签
img2 = browser.find_element_by_xpath('//*[@id="container"]/div[18]') # 结束标签
ActionChains(browser).move_to_element(img1).drag_and_drop(img1, img2).perform()
# 关闭浏览器
time.sleep(3)
browser.quit()
# 截止2019-6-5,代码无误
效果如下:
鼠标悬浮
鼠标悬浮也就是将鼠标移动到某个元素上面触发的事件,那么使用selenium怎么实现呢?
我们打开一个网站,使鼠标移动到超链接上,超链接会发生变化。
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.cnblogs.com/neeo')
time.sleep(3)
# 获取指定元素
a = driver.find_elements_by_class_name('postTitle2')[0]
# 移动到指定元素
ActionChains(driver).move_to_element(a).perform()
# 点击它
time.sleep(2)
ActionChains(driver).move_to_element(a).click().perform()
time.sleep(5)
driver.quit()
再来一个淘宝官网的示例,要求:
- 循环悬浮主题市场列表。
- 然后悬浮【女装/男装/内衣】,并点击其内的【夏上新】。
import time
from selenium import webdriver
from selenium.webdriver import ActionChains as AC
driver = webdriver.Chrome()
driver.get('https://www.taobao.com/')
# 获取 主题市场 列表
menu_list = driver.find_elements_by_class_name('J_Cat')
print(menu_list.__len__())
for i in menu_list: # 循环模拟鼠标悬浮
AC(driver).move_to_element(i).perform()
time.sleep(0.5)
# 悬浮到 女装/男装/内衣
time.sleep(2)
AC(driver).move_to_element(menu_list[0]).perform()
# 点击其内的 夏上新 链接
time.sleep(2)
obj = 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[1]')
print(obj.text)
obj.click()
time.sleep(6)
driver.quit()
滑动验证
代码:https://www.cnblogs.com/Neeo/articles/10996274.html
效果:
欢迎斧正,that's all