【Python】selenium获取鼠标在网页上的位置,并定位到网页位置模拟点击的方法
在使用Selenium写自动化爬虫时,遇到验证码是常事了。我在写爬取测试的时候,遇到了点击型的验证码,例如下图这种:
这种看似很简单,但是它居然卡爬虫?用简单的点触验证码的方法来做也没法实现
平常的点触的方法:
btn = driver.find_element_by_css_selector('.botton_')
btn.click()
这种方法失败后, 我决定要使用模拟鼠标点击的方法,通过pyautogui
库来实现。
pyautogui
可以模拟鼠标的慢加速、快到按钮时减速、缓慢停止等行为,以模仿人类点击按钮的方式。
简单的代码是这样的:
import pyautogui
pyautogui.moveTo(x=100, y=100)
pyautogui.click()
需要实现的逻辑是:
- 将网页放大到最大,就像点F11,这一步为了第二步可以获得正确的位置
- 定位到点触验证码点在网页上的位置
- 鼠标移动到该位置,并点击
- 如果想把页面还原
为了找到验证码的位置,我的实现的方法是这样的:
from selenium import webdriver
import pyautogui
import time
driver = webdriver.Chrome(options=option)time.sleep(3)
driver.maximize_window() # 最大化窗口
time.sleep(6)
current_position = pyautogui.position()
print(f"目标移动位置:X={xx}, Y={y}")
print(f"当前鼠标位置:X={current_position.x}, Y={current_position.y}")
这里是报出鼠标位置的方法,前提是在最大化窗口之后,我们把鼠标手动移动到目标的位置,例如:放在红色圈区域的位置这就能print出,在最大化页面下(一定要让页面最大化),要点击区域的绝对x轴和y轴的长度了,这样就能定位到目标的地方了。
driver.maximize_window() # 最大化窗口
sleep(3)
x=931
y=664
#pyautogui.moveTo(x, y)
#点击上面的位置
#pyautogui.restore() #调整会原来的大小
pyautogui.moveTo(x, y) #, duration=2, tween=pyautogui.linear
pyautogui.click()
sleep(3)#将页面缩小到成普通位置,以免占用电脑屏幕,这一步仅供参考
original_size = {'width': 800, 'height': 600}
driver.set_window_size(original_size['width'], original_size['height'])
sleep(3)
driver.refresh()#刷新
如果直接通过css_selector或者xpath的元素来点击验证按钮,无法通过验证的话,可以模拟鼠标点击的方法,这样更像模拟人类的行为。
注意,这种方法也只能是在,验证码出现的在一定时间内的,完成点击才不会被视为爬虫,所以在点击的时候,最好不要耽误太多时间在测试上。
当然如果有代理服务器的情况下做可能会更好。
相关文章:

【Python】selenium获取鼠标在网页上的位置,并定位到网页位置模拟点击的方法
在使用Selenium写自动化爬虫时,遇到验证码是常事了。我在写爬取测试的时候,遇到了点击型的验证码,例如下图这种: 这种看似很简单,但是它居然卡爬虫?用简单的点触验证码的方法来做也没法实现 平常的点触的方…...
【C++ 真题】B2078 含 k 个 3 的数
含 k 个 3 的数 题目描述 输入两个正整数 m m m 和 k k k,其中 1 < m ≤ 1 0 15 1 \lt m \leq 10^{15} 1<m≤1015, 1 < k ≤ 15 1 \lt k \leq 15 1<k≤15 ,判断 m m m 是否恰好含有 k k k 个 3 3 3,如果满足条…...
蓝桥杯省赛真题——冶炼金属
问题描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时,无法继续…...

【Mac苹果电脑安装】DBeaverEE for Mac 数据库管理工具软件教程【保姆级教程】
Mac分享吧 文章目录 DBeaverEE 数据库管理工具 软件安装完成,打开效果图片Mac电脑 DBeaverEE 数据库管理工具 软件安装——v24.21️⃣:下载软件2️⃣:安装JDK,根据下图操作步骤提示完成安装3️⃣:安装DBeaverEE&#…...
数据仓库中的维度建模:深入理解与案例分析
数据仓库中的维度建模:深入理解与案例分析 维度建模是数据仓库设计中最常用的一种方法,旨在简化数据访问、提高查询效率,特别适用于需要对数据进行多维分析的场景。本文将深入探讨维度建模的核心概念、设计步骤以及如何将其应用于实际案例中…...

前端打印功能(vue +springboot)
后端 后端依赖生成pdf的方法pdf转图片使用(用的打印模版是带参数的 ,参数是aaa)总结 前端页面 效果 后端 依赖 依赖 一个是用模版生成对应的pdf,一个是用来将pdf转成图片需要的 <!--打印的--><dependency><groupId>net.sf.jasperreports</groupId>&l…...

中间件有哪些分类?
中间件的分类 中间件是位于操作系统和应用程序之间的软件,它提供了一系列服务来简化分布式系统中的应用程序开发和集成。中间件可以根据其功能和用途被分为不同的类别。以下是中间件的一些主要分类: 1. 通信处理(消息)中间件&am…...

开始新征程__10.13
好久没有更新 csdn 了,身边的人都说 csdn 水,但是在我看来,它在我大一这一年里对我的帮助很大,最近上账号看看,看见了网友评论,哈哈,决定以后还是继续更新,分享自己的学习心得。...
SAP 联合创始人谈Home Office
软件公司 SAP 的家庭办公室规定继续引发激烈争论,其联合创始人哈索-普拉特纳(Hasso Plattner)对此也有明确看法。 沃尔多夫--年初,SAP 首席执行官克里斯蒂安-克莱因(Christian Klein)向员工宣誓 "努力…...

基于Jenkins+K8S构建DevOps自动化运维管理平台
目录 1.k8s助力DevOps在企业落地实践 1.1 传统方式部署项目为什么发布慢,效率低? 1.2 上线一个功能,有多少时间被浪费了? 1.3 如何解决发布慢,效率低的问题呢? 1.5 什么是DevOps? 1.5.1 敏…...
【OpenCV】(一)—— 安装opencv环境
【OpenCV】(一)—— 安装opencv环境 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV 是用 C 编写的,但它也有 Python、Java 和 MATLAB 接口,并支持 Windows…...
MybatisPlus操作符和运算值
好久没有更新了,这次更新一个当前端需要对运算符和运算值都需要前端传递给后端,动态拼接运算条件时的处理方法。 1、踩雷 查询年龄 >20,其中>前端下拉框选择,20值前端下拉框选择 1)用户表: CREAT…...

Index-1.9B模型部署教程
一、介绍 Index-1.9B 系列是 Index 系列型号的轻量级版本,包含以下型号: Index-1.9B 基础:具有 19 亿个非嵌入参数的基础模型,在 2.8T 主要为中文和英文的语料上进行预训练,在多个评测基准上与同级别模型相比领先。I…...

C语言 | Leetcode C语言题解之第468题验证IP地址
题目: 题解: char * validIPAddress(char * queryIP) {int len strlen(queryIP);if (strchr(queryIP, .)) {// IPv4int last -1;for (int i 0; i < 4; i) {int cur -1;if (i 3) {cur len;} else {char * p strchr(queryIP last 1, .);if (p…...

Qt自定义一个圆角对话框
如何得到一个圆角对话框? 步骤: 1、继承自QDiaglog 2、去掉系统自带的边框 3、设置背景透明,不设置4个角会有多余的部分出现颜色 4、对话框内部添加1个QWidget,给这个widget设置圆角,并添加到布局中让他充满对话框 5、后续对…...
C++ 中的自旋锁应用:SpinLockManual、SpinLockGuard 和 SpinLockTryGuard
在多线程编程中,同步机制是确保线程安全的关键。自旋锁(Spin Lock)是一种常见的同步机制,它通过忙等待(busy-waiting)的方式来实现线程间的互斥访问。在 C++ 中,我们可以使用 std::atomic_flag 来实现自旋锁。本文将介绍如何使用 SpinLockManual、SpinLockGuard 和 Spin…...

计算机网络 tcp和udp
目录 一、TCP 建立连接-TCP 三次握手 1) 什么是半连接队列和全连接队列? 2) 为什么要三次握手? 3) 三次握手过程中可以携带数据吗? 断开连接-TCP 四次挥手 1) 为什么要四次挥手? 2&…...

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性
文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…...
计算机网络 2024 11 10
计算机网络 - 知乎计算机网络(四)—— 网络层(1、2):网络层概述、网络层提供的两种服务_以下属于网络层范畴的是a透明传输比特流b媒体接入控制c ip地址d-CSDN博客 湖科大教书匠的个人空间-湖科大教书匠个人主页-哔哩哔…...

King3399(ubuntu文件系统)风扇驱动
该文章仅供参考,编写人不对任何实验设备、人员及测量结果负责!!! 0 引言 文章主要介绍King3399(ubuntu文件系统)风扇控制(GPIO),涉及king-rk3399.dts设备树修改&#x…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...