Python 通过Playwright+OpenCV破解滑动验证码 实例

由于公司最近需要对接某业务系统,涉及到部分数据需要提交至其它平台业务系统,只有其它平台账户,没有接口,因此做此开发。首先通过OpenCV计算出验证验证码滑块距离,根据距离,使用 Playwright 利用滑动距离模拟登录

 下面展示Python  通过 Playwright 滑动及登录过程
  1. 首先下载 安装 Playwright
pip install playwright
  1. 安装浏览器驱动(此步骤会在本地安装二进制浏览器:火狐、谷歌等)
	python -m playwright install
  1. Playwright 录制脚本(通过脚本录制,不需要写代码,通过鼠标事件将代码输出到文件当中)
python -m playwright codegen -o "D:test.py"
  1. 主要代码展示
import re
from playwright.sync_api import Playwright, sync_playwright
import time
import random
from result  import error_result, success_result
from position import get_gap_positiondef perform_slide(page, max_retries=3):"""执行滑块验证,支持自动重试"""retry_count = 0while retry_count < max_retries:try:page.wait_for_selector("#circle", state="visible", timeout=2000)page.wait_for_selector("#bg_canvas", state="visible", timeout=2000)# 计算缺口位置try:image_data = page.evaluate("document.getElementById('bg_canvas').toDataURL('image/png').split(',')[1]")gap_x = get_gap_position(image_data)except Exception as e:print(f"缺口检测失败,使用默认偏移量: {e}")gap_x = 50  # 备用值# 模拟拖动slider = page.query_selector("#circle")slider_bbox = slider.bounding_box()start_x = slider_bbox["x"] + slider_bbox["width"] / 2start_y = slider_bbox["y"] + slider_bbox["height"] / 2target_x = start_x + gap_x + 8page.mouse.move(start_x, start_y)page.mouse.down()steps = random.randint(15, 30)for i in range(steps):x = start_x + (target_x - start_x) * (i / steps)y = start_y + random.uniform(-2, 2)page.mouse.move(x, y)#time.sleep(random.uniform(0.01, 0.02))page.mouse.up()# 检查成功if page.query_selector(".popup-success"):print("验证成功!")return Trueelse:retry_count += 1print(f"验证失败,第 {retry_count} 次重试...")time.sleep(0.5)except Exception as e:print(f"滑动过程中出错: {e}")retry_count += 1return Falsedef login_with_slide(username: str,password: str,login_url: str = "http://test.com/",max_slide_retries: int = 3
) -> dict:"""执行带滑块验证的登录,并返回登录接口的 JSON 数据"""with sync_playwright() as playwright:browser = playwright.webkit.launch(headless=True)context = browser.new_context()page = context.new_page()page.set_default_timeout(5000)login_response = Nonedef handle_response(response):nonlocal login_responseif "login2" in response.url and response.status == 200:try:print("登录接口响应:", response.json())login_response = login_result(response.json())except ValueError:return error_result("接口返回非json数据")page.on("response", handle_response)try:page.goto(login_url)page.get_by_role("textbox", name="请输入统一社会信用代码或身份证号").fill(username)page.get_by_role("textbox", name="请输入密码").fill(password)page.get_by_role("button", name="登录").click()if not perform_slide(page, max_slide_retries):return error_result("滑块验证失败")# 等待登录接口响应page.wait_for_timeout(500)  # 简单延迟,确保响应已捕获return login_response or  error_result("未获取到登录异常")except Exception as e:return  error_result("f登录异常: {}"+str(e))finally:page.close()context.close()browser.close()def login_result(response: dict) -> dict:if response.get("result")==0:return success_result("成功",response.get("data",{}).get("userDetail"))return error_result("登录失败,接口信息异常")
if __name__ == "__main__":result = login_with_slide(username="admin",password="hpg123789")print("最终结果:", result)

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

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

相关文章

山东省天地图API申请并加载到QGIS和ArcGIS Pro中

目的&#xff1a;在QGIS/ArcGIS Pro中加载山东省不同时期的历史影像1、申请API 山东省天地图的API和国家天地图的API不通用&#xff0c;需要单独申请。 https://shandong.tianditu.gov.cn/ 打开本地服务资源找到影像的详情页 点击申请地址按照下面的步骤一步一步来&#xff0c;…

qt窗口--02

文章目录qt窗口--02QMessageBoxQColorDialogQFileDialogQFontDialogQInputDialog、结语很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&#…

Linux seLinux

Linux seLinux 1、什么是selinux&#xff0c;security enhanced linux–安全加强的linux。 是由美国国家安全局开发的以及历史。selinux之前是基于自主存取控制方法DAC&#xff0c; 只要符合权限即可&#xff0c;通过suid和sgid特殊权限存在有一定的安全隐患&#xff0c; 甚至一…

Linux: NFS 服务部署与autofs自动挂载的配置

Linux&#xff1a; NFS 服务部署与autofs自动挂载的配置NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是一种基于 TCP/IP 协议的网络文件共享协议&#xff0c;允许不同主机在网络中共享文件资源&#xff0c;实现跨主机的文件访问与管理&#xff0c;…

【深度学习②】| DNN篇

0 序言 本文将系统介绍基于PyTorch的深度神经网络&#xff08;DNN&#xff09;相关知识&#xff0c;包括张量的基础操作、DNN的工作原理、实现流程&#xff0c;以及批量梯度下降、小批量梯度下降方法和手写数字识别案例。通过学习&#xff0c;你将掌握DNN的核心概念、PyTorch实…

Xcode 26 如何在创建的 App 包中添加特定的目录

功能需求 在某些情况下,我们需要将特定文件放在 Xcode 编译链接后 App 包里的指定目录中,比如将 AI 大模型相关文件放在它们对应名称的目录中: 正常情况下,Xcode 会将项目目录中的所有文件都平铺放到 App 包的根目录里。那么,要如何形成上面这种文件目录层级呢? 在本篇…

linux-系统性能监控

linux-系统性能监控一、cpu1.1 查看cpu的信息1.2 cpu性能指标1.3 编写监控cpu使用率的脚本1.4 查找出使用cpu最高的10个进程二、内存2.1 查看内存信息2.2 交换&#xff08;swap&#xff09;分区2.2.1 查看交换分区的积极程度2.2.2 查看交换分区的大小2.2.3 管理交换分区2.3 编写…

AgxOrin平台JetPack5.x版本fix multi-cam race condition 补丁

本文包含三个针对NVIDIA Linux驱动程序的补丁修复: 多摄像头竞争条件修复 在capture-ivc驱动中新增信号量机制,解决多摄像头同时操作时的竞争条件问题(Bug 4425972)。主要修改包括在通道上下文结构中添加信号量,并在通道ID通知和取消注册时进行信号量操作。 内存泄漏修复…

【Go】P3 Go语言程序结构

Go语言程序结构Go语言程序结构命名规则与编程惯例核心规则四种声明语句详解var声明&#xff1a;变量声明const声明&#xff1a;常量声明type声明&#xff1a;类型定义func声明&#xff1a;函数声明简短变量声明(:)使用规则和限制指针&#xff1a;安全的内存地址操作基本概念和操…

【机器学习深度学习】知识蒸馏实战:让小模型拥有大模型的智慧

目录 引言&#xff1a;模型压缩的迫切需求 一、知识蒸馏的核心原理 1.1 教师-学生模式 1.2 软目标&#xff1a;知识传递的关键 1.3 蒸馏损失函数 二、实战&#xff1a;Qwen模型蒸馏实现 2.1 环境配置与模型加载 2.2 蒸馏损失函数实现 2.3 蒸馏训练流程 2.4 训练优化技…

基于MCP提示构建工作流程自动化的实践指南

引言 在现代工作和生活中&#xff0c;我们经常被各种重复性任务所困扰——从每周的膳食计划到代码审查反馈&#xff0c;从文档更新到报告生成。这些任务虽然不复杂&#xff0c;却消耗了大量宝贵时间。MCP&#xff08;Model Context Protocol&#xff09;提示技术为解决这一问题…

apache-tomcat-11.0.9安装及环境变量配置

一、安装从官网上下载apache-tomcat-11.0.9,可以下载exe可执行文件版本&#xff0c;也可以下载zip版本&#xff0c;本文中下载的是zip版本。将下载的文件解压到指定目录&#xff1b;打开tomcat安装目录下“\conf\tomcat-users.xml”文件&#xff1b;输入以下代码&#xff0c;pa…

Java 大视界 -- Java 大数据机器学习模型在电商用户生命周期价值评估与客户关系精细化管理中的应用(383)

Java 大视界 -- Java 大数据机器学习模型在电商用户生命周期价值评估与客户关系精细化管理中的应用&#xff08;383&#xff09;引言&#xff1a;正文&#xff1a;一、电商用户运营的 “糊涂账”&#xff1a;不是所有客户都该被讨好1.1 运营者的 “三大错觉”1.1.1 错把 “过客…

豆包新模型与PromptPilot工具深度测评:AI应用开发的全流程突破

目录引言一、豆包新模型技术解析1.1 豆包新模型介绍1.2 核心能力突破1.2.1 情感交互能力1.2.2 推理与编码能力二、PromptPilot工具深度测评2.1 PromptPilot介绍2.2 工具架构与核心功能2.3 一个案例讲通&#xff1a;市场调研报告2.3.1 生成Prompt2.3.2 批量集生成2.3.3 模拟数据…

【代码随想录day 12】 力扣 144.145.94.前序遍历中序遍历后序遍历

视频讲解&#xff1a;https://www.bilibili.com/video/BV1Wh411S7xt/?vd_sourcea935eaede74a204ec74fd041b917810c 文档讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E5%85%B6%E4%BB%96%E8%A…

【Unity】 HTFramework框架(六十七)UDateTime可序列化日期时间(附日期拾取器)

更新日期&#xff1a;2025年8月6日。 Github 仓库&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 仓库&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引一、UDateTime可序列化日期时间1.定义UDateTime字段2.日期拾取器&#xff08;编辑器&#xff09;3…

Docker的安装,服务器与客户端之间的通信

目录 1、Docker安装 1.1主机配置 1.2apt源的修改 1.3apt安装 2、客户端与服务端通信 2.1服务端配置 2.1.1创建镜像存放目录 2.1.2修改配置文件 2.2端口通信 2.3SSH连接 2.3.1生成密钥 2.3.2传输密钥 2.3.3测试连接 1、Docker安装 1.1主机配置 我使用的两台主机是…

【算法专题训练】09、累加子数组之和

1、题目&#xff1a;LCR 010. 和为 K 的子数组 https://leetcode.cn/problems/QTMn0o/description/ 给定一个整数数组和一个整数 k &#xff0c;请找到该数组中和为 k 的连续子数组的个数。示例 1&#xff1a; 输入:nums [1,1,1], k 2 输出: 2 解释: 此题 [1,1] 与 [1,1] 为两…

WinXP配置一键还原的方法

使用系统自带的系统还原功能&#xff1a;启用系统还原&#xff1a;右键点击 “我的电脑”&#xff0c;选择 “属性”&#xff0c;切换到 “系统还原” 选项卡&#xff0c;确保 “在所有驱动器上关闭系统还原” 未被勾选&#xff0c;并为系统驱动器&#xff08;C:&#xff09;设…

基于模式识别的订单簿大单自动化处理系统

一、系统概述 在金融交易领域&#xff0c;订单簿承载着海量的交易信息&#xff0c;其中大单的处理对于市场流动性和价格稳定性有着关键影响。基于模式识别的订单簿大单自动化处理系统旨在通过智能算法&#xff0c;精准识别订单簿中的大单特征&#xff0c;并实现自动化的高效处理…