当前位置: 首页 > news >正文

【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()

需要实现的逻辑是:

  1. 将网页放大到最大,就像点F11,这一步为了第二步可以获得正确的位置
  2. 定位到点触验证码点在网页上的位置
  3. 鼠标移动到该位置,并点击
  4. 如果想把页面还原

为了找到验证码的位置,我的实现的方法是这样的:

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的元素来点击验证按钮,无法通过验证的话,可以模拟鼠标点击的方法,这样更像模拟人类的行为。

注意,这种方法也只能是在,验证码出现的在一定时间内的,完成点击才不会被视为爬虫,所以在点击的时候,最好不要耽误太多时间在测试上。

当然如果有代理服务器的情况下做可能会更好。

http://www.lryc.cn/news/459445.html

相关文章:

  • 【C++ 真题】B2078 含 k 个 3 的数
  • 蓝桥杯省赛真题——冶炼金属
  • 【Mac苹果电脑安装】DBeaverEE for Mac 数据库管理工具软件教程【保姆级教程】
  • 数据仓库中的维度建模:深入理解与案例分析
  • 前端打印功能(vue +springboot)
  • 中间件有哪些分类?
  • 开始新征程__10.13
  • SAP 联合创始人谈Home Office
  • 基于Jenkins+K8S构建DevOps自动化运维管理平台
  • 【OpenCV】(一)—— 安装opencv环境
  • MybatisPlus操作符和运算值
  • Index-1.9B模型部署教程
  • C语言 | Leetcode C语言题解之第468题验证IP地址
  • Qt自定义一个圆角对话框
  • C++ 中的自旋锁应用:SpinLockManual、SpinLockGuard 和 SpinLockTryGuard
  • 计算机网络 tcp和udp
  • React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性
  • 计算机网络 2024 11 10
  • King3399(ubuntu文件系统)风扇驱动
  • 前端开发笔记--html 黑马程序员2
  • django(二):定义第一个函数及url介绍
  • 66 消息队列
  • 【系统分析师】-案例篇-信息系统安全
  • 基于极光优化算法(Polar Lights Optimization, PLO)的多无人机协同三维路径规划(提供MATLAB代码)
  • TypeScript类型体操5
  • 搭建广告展示页Start
  • 无极低码基础版(部署版)课程计划
  • Word文档功能快捷键大全
  • 题目:1297. 子串的最大出现次数
  • 一力破万法,高并发系统优化通解思路