selenium之鼠标操作

首先导入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)

        结合使用,比如:鼠标移动到某元素上悬停的时间。(暂停所有动作,相当于等待,用于链式操作过程中的等待)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2034.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python【爬虫】【批量下载】年报抓取

python年报爬取更新 本人测试发现,ju chao网的年报爬取距离我上一篇博客并没有啥变化,逻辑没变,应好多朋友的需要,这里补充代码 import json import osimport requestsweb_url 改成网站的域名,因为csdn屏蔽 def load…

HOT20-旋转图像

leetcode原题链接:旋转图像 题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入&am…

Android JetPack 深入分析ViewModel源码

文章目录 前言源码分析ViewModel是如何创建的?ViewModelProvider(this)做了什么?小结 get(MyViewModel::class.java)做了什么?小结 ViewModel是如何实现配置更改后数据恢复的?整体时序图 结语 前言 本文主要分析ViewModel相关源码…

JUC之LockSupport和中断

文章目录 1 线程中断机制1.1 什么是线程中断机制1.2 三大中断方法1.3 如何中断运行中的线程1.3.1 通过volatile变量实现1.3.1 通过AtomicBoolean实现1.3.1 通过interrupt和isInterrupted api实现 2 LockSupport2.1 为什么会出现LockSupport2.2 两道面试题 参考材料 1 线程中断机…

移动隔断屏风墙,无地轨设计,空间灵活应用

移动隔断屏风墙是一种非常适合办公室的设计选择,它可以提供灵活的办公空间布局,并且无地轨设计可以避免地面安装轨道,给空间带来更大的自由度。以下是一些关于移动隔断屏风墙的特点和设计建议: 1. 灵活应用:移动隔断屏…

JavaScript进阶----《getter 和 setter 是什么》

前言: 这两个属性在学习前端的时候看到过,但是由于项目中没有用到过,所以一直没有细致的了解。今天 review 同事代码的时候,遇到了这个写法,看了半天也不知道如何处理。再不学习真的以后连别人的代码都不知道什么意思了…

百度智驾,与车路协同说「再见」

作者 | 魏启扬 来源 | 洞见新研社 在经历了裁员,全员停发年终奖之后,百度对智能交通事业部(ACE)的治理还在继续。 不久前,有媒体爆料称,百度已经将智能交通事业部(ACE)从原来的智能…

微信小程序——分页组件的创建与使用

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

C++类与对象(默认成员函数之拷贝构造函数)

接前几次的类与对象的默认函数的知识点,下来面是默认成员函数中的拷贝构造函数。是的,它的名字是拷贝构造函数,他其实也是一种构造函数,为什么呢?接下来你就知道了,我们直接看看代码,如下&#…

kafka入门,发送原理和生产者重要参数(三)

发送原理 在消息发送过程中,涉及两个线程,main线程和Sender线程。在main线程中创建了一个双端队列,RecordAccumulator,Sender过程不断从RecordAccumulator中拉取消息发送到Kafka Broker batch size:只有数据累计到batch.size之后&#xff0…

C#winform listBox组件批量删除

修改listBox组件属性:可以选中多个板坯号 选中板坯列表,在界面上点击删除按钮,触发删除方法deleteList: private void deleteList() { ListBox.SelectedIndexCollection sic listBoxProducts.SelectedIndice…

虹科分享|如何防范MOVEit transfer漏洞|高级威胁防御

美国网络安全和基础设施安全局(CISA)承认,它正在向几个联邦机构提供支持,这些机构在Progress(前身为IpSwitch)MOVEit传输解决方案中暴露出漏洞后被攻破。根据CISA发布的一份警报和网络安全公告,CL0P勒索软件团伙一直在积极利用漏洞进行数据外…