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

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

1、ActionChains的使用语法

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

python 复制代码
from selenium.webdriver import ActionChains

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

python 复制代码
baidu_cl=driver.find_element_by_link_text("新闻") #定位元素新闻并赋值给baidu_cl

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

python 复制代码
ActionChains(driver).click(baidu_cl).perform()   #点击新闻

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

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

整体运行:

python 复制代码
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()指令。

python 复制代码
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)    #发出点击新闻按钮的指令

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

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

python 复制代码
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()后才能正常进行点击。

相关推荐
2601_962293241 小时前
Python自动化统计团队工作量并生成可视化仪表盘的脚本方案【指导】
python·数据分析·自动化·可视化·仪表盘
2601_962293793 小时前
OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务
python·自动化·批处理脚本·ocrmypdf·ocr任务
Java后端的Ai之路4 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
2601_962077715 小时前
基于Python与NLP的新闻事件信息抽取实战:从NER到时空标准化
python·nlp·transformers·spacy·新闻事件抽取
JavaPub-rodert5 小时前
LangChain 从入门到 Agent 实战:用 Python 搭建一个真正能调用工具和知识库的 AI 助手
人工智能·python·langchain
郝学胜-神的一滴5 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
m0_380743876 小时前
给 OpenAI API 调用加上模型切换:GPT-5.1 和 Codex 的配置实践
人工智能·python·gpt
2601_962297486 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
“AI国潮设计-小江”6 小时前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
公爵爱学习7 小时前
无人机视觉识别前序-Linux-YOLO安装
python·yolo·计算机视觉·conda·无人机