Python+Selenium+Unittest 之selenium12--WebDriver操作方法2-鼠标操作1(ActionChains类简介)

news2024/12/26 11:52:39

        在我们平时的使用过程中,会使用鼠标去进行很多操作,比如鼠标左键点击、双击、鼠标右键点击,鼠标指针悬浮、拖拽等操作。在selenium中,我们也可以去实现常用的这些鼠标操作,这时候就需要用到selenium中的ActionChains类了,ActionChains类里包含了上述一些列的鼠标操作。

1、ActionChains的使用语法

(1)首先第一步我们是要先导入ActionChains类。

from selenium.webdriver import ActionChains

(2)定位一个元素并赋值

baidu_cl=driver.find_element_by_link_text("新闻") #定位元素新闻并赋值给baidu_cl

(3)使用ActionChains来点击新闻按钮

ActionChains(driver).click(baidu_cl).perform()   #点击新闻

常用的写法为:ActionChains(driver).鼠标要进行的操作(鼠标要操作的元素).perform()

        这里其实是执行了两个操作,1是调用ActionChains中的click()方法发出对元素进行点击的指令,2是进行执行perform()方法,运行之前发出的指令。如果这里不加perform(),ActionChains(driver).click(baidu_cl)是不会运行的,只有运行了perform才会去运行之前的指令。可以这么去理解,就像我们在调试代码一样,先把需要的代码都写好,只有点了运行按钮才会从上到下的运行之前写好的代码。

整体运行:

from selenium import webdriver              #导入selenium模块的webdriver
from selenium.webdriver import ActionChains #导入ActionChains类
driver = webdriver.Chrome()           #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com")   #打开百度浏览器  
baidu_cl=driver.find_element_by_link_text("新闻")    #定位元素新闻按钮并赋值给baidu_cl
ActionChains(driver).click(baidu_cl).perform()      #发出点击新闻按钮的指令并执行

下面来分开写看下,不加perform()的情况下是否会运行click()指令。

from selenium import webdriver              #导入selenium模块的webdriver
from selenium.webdriver import ActionChains #导入ActionChains类
driver = webdriver.Chrome()           #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com")   #打开百度浏览器  
baidu_cl=driver.find_element_by_link_text("新闻")    #定位元素新闻按钮并赋值给baidu_cl
ActionChains(driver).click(baidu_cl)    #发出点击新闻按钮的指令

运行后发现,只会打开浏览器不会执行点击的操作。

下面再分开写看下是否会正常执行。(先点击首页新闻推荐的换一换,然后再点击新闻按钮)

from selenium import webdriver              #导入selenium模块的webdriver
from selenium.webdriver import ActionChains #导入ActionChains类
driver = webdriver.Chrome()           #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com")   #打开百度浏览器  
baidu_cl=driver.find_element_by_link_text("新闻")    #定位元素新闻按钮并赋值给baidu_cl
baidu_huan=driver.find_element_by_class_name("hot-refresh-text")   #定位到换一换
cli=ActionChains(driver)      #ActionChains(driver)实例化给cli
cli.click(baidu_cl)           #发出点击新闻元素的指令
cli.click(baidu_cl)           #发出点击换一换的指令
cli.perform()                #运行上面的所有指令(从上到下执行,先点击换一换,再点击新闻)

      运行这段代码就可以较为明显的看出来perform()的作用了。先是把用户生成行为或者就是说发出指令全部储存在ActionChains的对象中,然后使用perform()方法把储存在ActionChains中的指令按顺序去进行执行。

        发一个学习中发现的问题,这时候就会有疑问,为什么之前使用click()进行点击的时候,没有使用perform()也能正常调用,后来进行一系列搜索发现,两个click()是不一样的,一个是selenium中的click(),这时候可以直接单独使用,一般进行比较简单的场景时,直接使用click()就能满足,而另一个ActionChains类中的click(),这时候使用click()就需要满足上面说的ActionChains的使用方法,并且用perform()后才能正常进行点击。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

采用springboot 2.7.10来操作clickhouse

1、采用springboot与clickhouse结合&#xff0c;其实和操作mysql&#xff0c;oracle区别不大。直接上代码开干 2、所采用的环境 jdk1.8 springboot 2.7.10 clickhouse 22.8.3.13 clickhouse 0.5.0 3、项目的pom.xml文件 <dependency><groupId>com.clickhous…

基于SSM框架的共享单车管理系统小程序系统的设计和实现

基于SSM框架的共享单车管理系统小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;…

整理笔记——稳压直流电路知识

一、稳压直流电路的基本构成 稳压直流电路就是把生活中常用的220V交流电转换成稳压直流电。如生活中常见的手机充电器就是一个稳压直流电路。其主要功能是提供持续稳定且满足要求的电压。 直流稳压电路由一下几个模块组成&#xff1a; 下面具体分析下各个模块的功能。…

编译原理——构造预测分析表(判断某字符串是否是文法G(E)的句子)

进入今天的学习前&#xff0c;若不理解LL(1)文法中的首符号集&#xff0c;后跟符号集和选择符号集&#xff0c;可看&#xff1a; http://t.csdnimg.cn/BjSHv 构造预测分析表的步骤&#xff1a; 步骤1&#xff1a;对文法的每个规则U->u,执行步骤2与3 步骤2&#xff1a;对…

Springboot---整合对象储存服务MinIO

OSS 「OSS」的英文全称是Object Storage Service&#xff0c;翻译成中文就是「对象存储服务」&#xff0c;官方一点解释就是对象存储是一种使用HTTP API存储和检索非结构化数据和元数据对象的工具。 白话文解释就是将系统所要用的文件上传到云硬盘上&#xff0c;该云硬盘提供了…

chatGPT使用情况

作为一个语言模型&#xff0c;我&#xff08;ChatGPT&#xff09;被用于各种不同的应用场景。以下是一些常见的情况&#xff1a; 个人助手&#xff1a;人们可以使用我来获取信息、解答问题、获取建议或进行闲聊。我可以提供各种知识和帮助&#xff0c;从学术知识到日常生活的建…

nginx发布vue项目

1、docker拉取nginx镜像 docker pull nginx:latest2、docker安装nginx # 第一个80端口是主机端口&#xff0c;第二个80端口是内部端口&#xff0c;主机的端口 80 映射到容器内部的端口80 docker run -d --name nginx -p 80:80 -p 443:443 nginx:lateste3、输入IP访问 说明我们…

javaEE进阶

Cookie 是可以伪造的,比如说学生证是可以伪造的 Session 是不可以伪造的,这是学校系统记录在册的 如何获取 Cookie 我们先用 Servlet 原生的获取 cookie 的方式 我们在浏览器进行访问 但是实际上目前是没有 cookie 的,我们按 F12 进行添加 然后再重新访问,就能在 idea 看到 …

什么是高敏感型人格,高敏型人格如何改变自己

什么是高敏感型人格&#xff1f; 高敏感型人格&#xff0c;指的是个体情绪敏感度高&#xff0c;有好处也有不好的地方&#xff0c;比如说好处吧&#xff0c;高敏感型人格他们对情绪的感知更加细腻&#xff0c;这种特征在创作和设计方面&#xff0c;往往能到达常人所不能达到的…

NIO讲解

一&#xff1a;什么是NIO? 二&#xff1a;NIO三大组件 1. channel channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发006:基于redis查找玩家姓名+游戏业务实现总结

文章目录 1 Redis的安装与API的使用1.1 安装目录及环境变量1.2 设置远程客户端连接和守护进程1.3 启动redis1.4 Hiredis API的使用1.5 我的动态库和头文件 2 Redis的使用2.1 初始化时候2.2 结束的时候 3 测试4 Makefile5 游戏业务总结 1 Redis的安装与API的使用 1.1 安装目录及…

Kotlin HashMap entries.filter过滤forEach

Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…

Python用requests库采集充电桩LBS位置经纬度信息

这是一个使用Python的requests库来爬取网页内容的示例。首先&#xff0c;我们需要导入requests库。然后&#xff0c;我们需要定义一个函数来处理请求。在这个函数中&#xff0c;我们需要设置爬虫IP服务器的URL和端口号&#xff0c;然后使用requests.get来获取网页内容。最后&am…

将 Figma 轻松转换为 Sketch 的免费方法

最近浏览网站的时候&#xff0c;发现很多人不知道Figma是怎么转Sketch的。众所周知&#xff0c;Figma支持Sketch文件的导入&#xff0c;但不支持Sketch的导出&#xff0c;那么Figma是如何转Sketch的呢&#xff1f;不用担心&#xff0c;建议使用神器即时设计。它是一个可以实现在…

【C++】类和对象(一):什么是面向对象,访问限定符有哪些,类定义细节,结构体和类的关系。

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

使用ffmpeg调用电脑自带的摄像头和扬声器录制音视频

1、打开cmd&#xff0c;执行chcp 65001,修改cmd的编码格式为utf8&#xff0c;避免乱码 2、执行指令ffmpeg -list_devices true -f dshow -i dummy,查看当前window的音频和视频名称 3、打开windows系统的"打开声音设置"–“麦克风隐私设置”–"允许应用访问你…

Vue 将响应式数据转为普通对象

toRaw&#xff1a;将一个 reactive 生成的响应式数据转为普通对象。 toRaw 适用于&#xff1a;获取响应式数据对应的普通对象&#xff0c;对这个普通对象所有的操作&#xff0c;都不会引起页面的更新。 markRaw&#xff1a;标记一个对象&#xff0c;使其永远不会再成为响应式…

C++中将数据添加到文件的末尾

参考:https://blog.csdn.net/qq_23880193/article/details/44279283 C中文件的读取需要包含fstream文件&#xff0c;即&#xff1a;#include 文件的读取和写入是是通过流操作来的&#xff0c;这不像输入、输出流那样&#xff0c;库中已经定义了对象cin和cout 文件的读取需要声…

lv11 嵌入式开发 ARM体系结构理论基础2

目录 1 ARM概述 1.1 处理器分类 1.2 SOC概念 2 ARM指令集概述 2.1 ARM指令集 2.2 编译原理 3 ARM存储模型 3.1 ARM数据类型 3.2 字节序 3.3 ARM指令存储 4 ARM工作模式 4.1 ARM工作模式分类 1 ARM概述 ARM的含义 ARM&#xff08;Advanced RISC Machines&#…

VB自定义版影音播放器

利用VB开放自定义播放器&#xff0c;基于系统Quatrz.dll的接口将媒体显示到指定的控件容器中&#xff0c;比如PictureBox,实现播放的基本功能&#xff0c;播放&#xff0c;暂停&#xff0c;停止&#xff0c;音量&#xff0c;平衡&#xff0c;进度&#xff0c;媒体的总时间和进度…