首页 > 其他分享 >鼠标事件

鼠标事件

时间:2022-12-26 16:37:43浏览次数:65  
标签:鼠标 driver element sleep 事件 time import

在​​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_drag

 

所谓的拖动,也就是鼠标左键点击标签不松开,直到拖动到指定标签后再松开。

来个​​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()

滑动验证

 

代码:​​javascript:void(0)​​效果:

鼠标事件_html_02




我们来看看​​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_drag

 

所谓的拖动,也就是鼠标左键点击标签不松开,直到拖动到指定标签后再松开。

来个​​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()

滑动验证

 

代码:​​javascript:void(0)​​效果:

鼠标事件_html_02

标签:鼠标,driver,element,sleep,事件,time,import
From: https://blog.51cto.com/u_15920572/5969310

相关文章

  • FineUI通过js事件条用后台方法实现弹窗
    一、html标签的onclick事件<buttontype="button"class="btnUpdate"onclick="<%#GetEditUrl(Eval("DetailId"))%>">纠正</button>二、后台弹窗方法publicstrin......
  • 概率论学习二、样本空间与事件
    一、样本空间为了研究随机试验,首先需要知道这个试验可能出现的结果。这些结果称为样本点,一般用ωω表示。样本点全体构成样本空间(samplespace),用ΩΩ表示。在概率论的研究......
  • android处理Back键Home键和Menu键事件
    @OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){if(keyCode==KeyEvent.KEYCODE_BACK){//监控/拦截/屏蔽返回键......
  • 【HMS Core】华为分析事件管理超限后如何创建新事件?
    1、问题描述项目中使用了华为分析SDK,目前遇到了一个问题:在AppGalleryConnect的控制台中华为分析的模块中,在事件管理下面遇到了事件超限的问题,界面上没有删除事件的功能,没找......
  • 【HMS Core】华为分析事件管理超限后如何创建新事件?
    ​1、问题描述项目中使用了华为分析SDK,目前遇到了一个问题:在AppGalleryConnect的控制台中华为分析的模块中,在事件管理下面遇到了事件超限的问题,界面上没有删除事件的功......
  • 第三章 --------------------XAML的属性和事件
    1.XAML注释是什么样子的? 在之前的章节有提起过,但是这一节我还是想系统的学习XAML,XAML的注释如下<!--     //这其中填写注释-->Notice:在注释的部分编译器......
  • 数据泄露事件频发,数据库敏感字段如何治理?
      1.背景 1.1数据安全风险 近年来,有关数据泄露相关的新闻事件屡见不鲜,不断地引发大众的讨论和担忧。各家企业都或多或少在承受相关的数据安全风险,这种可能性会......
  • JS——BOM&事件
    即做特定动作时,更改其原有的属性和方法。特点:在事件定义的function的this是指的绑定事件的对象。全部行为内添加,优先级最高事件相同时,后面会覆盖前面的事件。onclic......
  • DDD事件风暴 - 微服务拆分
    DDD的事件风暴第四个阶段“微服务拆分”,我们可以用限界上下文可以作为粗粒度的微服务边界,但落地时往往不得不考虑更多其他因素,比如弹性边界、安全需求、软件包大小、团队沟......
  • DDD事件风暴 - 领域建模
    DDD的事件风暴第三个阶段“领域建模”时,我们会根据场景分析过程中产生的领域对象,比如命令、事件等之间关系,找出产生命令的实体,分析实体之间的依赖关系组成聚合,为聚合划定限......