Python爬虫(4)-Selenium模拟鼠标操作

news2024/12/25 13:43:23

在Selenium4.2以后的版本里面鼠标的操作方法都封装在了ActionChains中需要时直接取即可。

1.鼠标双击

使用方法就是调用ActionChains然后传入你需要点击的按钮的位置即可

ActionChains(driver).double_click(f1).perform()

perform()的意思就是执行所有ActionChains中的动作

具体的操作方法如下

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.CSS_SELECTOR,'div.search-box')
ActionChains(driver).double_click(f1).perform()

2.鼠标单击

鼠标单击就是直接用click()即可,这种点一下操作主要是左键点击
右键点击就需要调用ActionChains,ActionChains(driver).context_click(f1).perform()

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.CSS_SELECTOR,'div.search-box').click()#左键单击
ActionChains(driver).context_click(f1).perform()#右键单击

3.鼠标悬停于元素上

将鼠标移动到元素的上方

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.CSS_SELECTOR,'div.search-box')
ActionChains(driver).move_to_element(f1).perform()

4.将鼠标移动到目标位置

此时鼠标位于窗口的左上方
action = ActionBuilder(driver)
action.pointer_action.move_to_location(10, 0)
action.perform()

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.CSS_SELECTOR,'div.search-box')
ActionChains(driver).move_to_element(f1).perform()
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()

5.将鼠标移动到指定位置

ActionChains(driver).move_by_offset(20,20).perform()

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.CSS_SELECTOR,'div.search-box')
ActionChains(driver).move_to_element(f1).perform()
ActionChains(driver).move_by_offset(20,20).perform()

6.用鼠标拖放元素

将A元素移动到B元素的位置然后释放掉鼠标

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.XPATH,'//*[@id="csdn-toolbar"]/div/div/div[1]/ul/li[2]/a')
f2=driver.find_element(By.XPATH, '//*[@id="csdn-toolbar"]/div/div/div[1]/ul/li[3]/a')
ActionChains(driver).drag_and_drop(f1,f2).perform()

可以清楚看到从下载移动到学习这个按钮上
在这里插入图片描述

7.鼠标拖动

这里的拖动需要给一个起始和结束位置,只要知道起始的位置和拖动结束位置鼠标就能够根据给的位置进行操作

也就是你需要知道窗口中x和y的值在窗口中的那个位置,以及你想要移动到的位置。

只要给定好范围,就能够进行鼠标在窗口中的拖动。

from selenium.webdriver import Chrome, ChromeOptions, ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
action = ActionBuilder(driver)
driver.get("https://so.csdn.net/so/search?spm=1001.2101.3001.4498&q=XPATH%E5%AE%9A%E4%BD%8D&t=&u=&s=hot")
driver.refresh()
f1=driver.find_element(By.XPATH,'//*[@id="csdn-toolbar"]/div/div/div[1]/ul/li[2]/a')
start = f1.location
f2=driver.find_element(By.XPATH, '//*[@id="csdn-toolbar"]/div/div/div[1]/ul/li[3]/a').location
ActionChains(driver).drag_and_drop_by_offset(f1,f2['x'] - start['x'],f2['x']-start['y']).perform()

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

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

相关文章

python字典应用

python字典应用 文章目录python字典应用一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤字典的综合案例使用collections模块的defaultdict类来实现创建字典。拓展知识一:内置函数globals()和locals()拓展知识二:有序字典 collections.Ord…

如何使用MyBatis简化JDBC开发?MyBatis持久层框架快速入门

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层,业务层和持久层,使用Java 代码操作数据库属于持久层内容,而 MyBatis 对 JDBC …

Multus k8s网络浅谈

Multus是什么 k8s不提供网络解决方案,提供CNI ( Container Networking Interface )规范,被CNI插件遵守(Flannel, Calico,Multus等,这些是网络方案) Multus 提供了将多个接口添加到pod的功能 Flannel 为每…

实现自己的数据库三

一 前言上篇实现了数据库的持久化,就是一个质的飞跃,虽然代码不复杂,但是对没有这方面经验者来说,还是意思的,下一步就是要完成另外一个飞跃,将存储的数据结构采用B树的形式来保存。在改造之前,…

为什么要设计非公平锁?

背景 公平:排队 非公平:在合适时机插队 非公平还是 ReentrantLock 的默认策略,排队时间不浪费了? 场景 来看这种场景 假如A持有一把锁,B请求这把锁,这时候B被挂起进入阻塞,A释放锁的时候&a…

点与线段的关系

点与线段的关系 对于向量a(x1,y1)和b(x2,y2) 点乘的数学意义:a * b x1x2 y1y2 点乘的几何意义:a * b |a||b|cosQ 这个可以看成是投影关系表达式:cosQ a * b / ( |a||b|) 令r cosQ; 求p点和线段AB的位置关系,可以…

将字符串根据指定的分隔符拆分为元组str.partition()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串根据指定的分隔符拆分为元组 str.partition() 选择题 对于以下python代码最后输出的结果是? string "I Love Python" print("【显示】string.partition(Love)"…

Unity3d 微信小程序(小游戏)项目实现流量主接入功能(含源码)

前言 很早之前编写了Unity导出微信小游戏的博客,也尝试自己做了个Demo上线了,基本没更新过,不过几个月的时间,用户超过了一千,可以开通流量主了,大概率是因为上篇的帖子浏览量大了,扫码体验的人…

Aurora、Chip2chip、Ethernet(二)

摘要:Aurora、Chip2chip、Ethernet共用一个gt时钟的正确的解决方案以及在实际实现以及在实现过程中遇到的其它的问题。 我在实际中遇到的困难如下: 现在需要将三个ip共用一对GT时钟,一个Ethernet IP,一个Ethernet IP&#xff08…

每日学术速递1.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1. Compact Transformer Tracker with Correlative Masked Modeling 标题:带有相关掩码建模的紧凑型变压器跟踪器 作者: Zikai Song, Run Luo, Junqing Yu, Y…

GLM国产大模型训练加速:性能最高提升3倍,显存节省1/3,低成本上手

作者|BBuf、谢子鹏、冯文 2017 年,Google 提出了 Transformer 架构,随后 BERT 、GPT、T5等预训练模型不断涌现,并在各项任务中都不断刷新 SOTA 纪录。去年,清华提出了 GLM 模型(https://github.com/THUDM…

一句话说明线程和进程

知识点: 1、一句话说明线程和进程 2、操作系统为什么需要进程 3、为什么要引入线程 4、一图说明线程和进程的关系 一、一句话说明线程和进程 进程:是指⼀个内存中运⾏的应⽤程序,比如QQ、微信、浏览器等;⼀个应⽤程序可以同时运⾏…

CAS 和 Synchronized优化过程以及常见的锁策略

目录 🐑今日良言:追星赶月莫停留,平芜尽处是春山 🐂一、锁策略 🐼二、CAS 🐭三、Synchronized 🐑今日良言:追星赶月莫停留,平芜尽处是春山 🐂一、锁策略 锁策略是实现锁的时候,考虑出现锁竞争了该怎么…

电驱系统电磁兼容基础知识及测试方法

电驱系统电磁兼容基础知识及测试方法 学习参考:驱动视界公众号、百度百科、《电动汽车电机驱动系统EMC研究综述》 1.背景 2.电磁干扰三要素 3.电波暗室与屏蔽室的原理 4.测试方法 5.如何看测试数据 6.工作中需要注意的EMC的几点问题 7.案例 1.背景 汽车工业发展…

docker安装db2

第一步:下载镜像 docker pull ibmcom/db2express-c:latest备注:docker images -a 可以查看已安装镜像; 第二步:启动镜像 docker run -d --name db2 -p 50000:50000 -e DB2INST1_PASSWORD[数据库密码] -e LICENSEaccept ibmcom…

玩转PPT 第1节 PPT制作理念学习笔记

ppt神器islide 第1节 初步接触强大的工具1 PPT大神的课程总结1.1 骨架篇1.2 色彩篇1.3 对齐篇1.4 对比篇1.5 修饰篇1.6 字体篇1.7 素材篇1.8 线条篇1.8.1 可以随意画线条,填充空白1.8.2 在字体上画线条,做成艺术字1.8.3 做对称线条,比如递进三…

Bluesky勒索软件深度技术分析

0 1、 背景介绍 勒索软件作为一种流行的木马,近年来已成为最为常见的安全威胁之一。与其他威胁不同,勒索软件先向受害者表明自己的身份,再通过加密的方式使用户数据资产或计算资源无法正常使用,而恢复数据资产的唯一方法通常是支…

收藏破万,谷歌联手哈佛发布首个炼丹指南:教你科学化「调参」

调参不能只靠直觉,也是一门大学问! 虽然算法工程师往往调侃自己是「调参侠」,但调参这件事可能真没想象中那么简单。 比如,你是不是经常会有疑惑到底该选择哪个优化器?一个batch放多少数据?超参数如何设置…

人工智能英文缩写怎么读,人工智能英文缩写大全

1、人工智能英文缩写是什么? AI。 人工智能,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术以及应用系统的一门技术科学。“十三五”以来,我国高度重视人工智能的发展,国内科研机构也围绕人工智能…

【Pytorch项目实战】之机器翻译:编码器-解码器、注意力机制AM

文章目录机器翻译 - 中英文翻译算法一:编码器-解码器(Encoder - Decoder)算法二:注意力机制(Attention Model,AM)2.1为何要引入注意力机制?2.2注意力机制的语义向量表示C计算2.3每个…