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

python解决滑动验证码方案

1.获取需要滑动的图片

        
import base64

if safe_query(page, '//*[contains(text(),"向右滑动完成验证")]'):target_img = safe_query(page, '//*[@class="verify-sub-block"]/img')if not target_img:continuetarget_b64 = target_img.get_attribute("src").split(";base64,", 1)[-1]target_bytes = base64.b64decode(target_b64.encode())

 

2.获取滑动背景图片

background_img = safe_query(page, '//*[@class="verify-img-panel"]/img')if not background_img:continuebackground_b64 = background_img.get_attribute("src").split(";base64,", 1)[-1]background_bytes = base64.b64decode(background_b64.encode())

 

3.计算滑块与目标位置距离

import cv2
import numpy
import numpy as np
from io import BytesIOdef match_slider_from_bytes(bg_bytes: bytes, slider_bytes: bytes, debug=False) -> int:bg_array = np.frombuffer(bg_bytes, np.uint8)slider_array = np.frombuffer(slider_bytes, np.uint8)bg = cv2.imdecode(bg_array, cv2.IMREAD_GRAYSCALE)slider = cv2.imdecode(slider_array, cv2.IMREAD_GRAYSCALE)# 边缘检测bg_edge = cv2.Canny(bg, 100, 200)slider_edge = cv2.Canny(slider, 100, 200)# 模板匹配result = cv2.matchTemplate(bg_edge, slider_edge, cv2.TM_CCOEFF_NORMED)_, max_val, _, max_loc = cv2.minMaxLoc(result)return max_loc[0]  # 返回x坐标

distance = match_slider_from_bytes(background_bytes, target_bytes, False)
ii = "距离:{}".format(distance)
print(ii)
  • 核心流程:字节数据→NumPy 数组→灰度图→边缘检测→模板匹配→提取 X 坐标,全程围绕 “精准找到滑块位置” 展开。
  • 关键优化:转灰度图 + 边缘检测,剔除了颜色、亮度等干扰因素,让模板匹配只关注滑块的轮廓特征,准确率更高。
  • 适用场景:主要用于自动化操作中破解滑块验证码,返回的 X 坐标可直接用于控制滑块拖动的距离。

4.模拟人为滑动

def human_like_drag(page, slider, distance: int):box = slider.bounding_box()if box is None:raise Exception("未能获取滑块坐标")start_x = box["x"] + box["width"] / 2start_y = box["y"] + box["height"] / 2page.mouse.move(start_x, start_y)page.mouse.down()current_x = start_xtotal_steps = 3for i in range(total_steps):step = (distance / total_steps) * random.uniform(0.9, 1.1)current_x += stepjitter_y = start_y + random.uniform(-0.5, 0.5)page.mouse.move(current_x, jitter_y)time.sleep(random.uniform(0.01, 0.03))page.mouse.up()slider_block = safe_query(page, '//*[@class="verify-move-block"]')if not slider_block:continue
human_like_drag(page, slider_block, distance)
  • 核心设计思路:通过 “中心点击 + 分步滑动 + 随机步长 + Y 轴抖动 + 微小停顿”,模拟真人操作特征,避免被反爬风控识别。
  • 关键细节:所有随机值(步长、抖动、停顿)都是为了打破机器的 “规律性”,贴近人类操作的 “不规整性”。
  • 依赖环境:需要导入randomtime库,且page对象需是 Playwright/Puppeteer 等支持mouse操作的自动化对象。

5.如果不成功,整个步骤可以循环几次

 

http://www.jsqmd.com/news/336741/

相关文章:

  • Rust日报】RustyBoard——最大的Rust专属招聘网站
  • 库克反击中国手机,大量安卓用户转买iPhone,真是风水轮流转!
  • 别让你的 AI 像个实习生!从 Skills 到 MCP:教你如何给大模型装上‘工业级’机械臂
  • UE5 多线程(5-3):锁的智能指针版本 FScopeLock 与 FScopeUnlock。
  • 2026年非开挖管道施工企业top3深度评估:资质、设备、案例、服务四维解析 - 深度智识库
  • python基于微信小程序的智慧社区小区活动物业管理系统的设计与实现
  • 如何构建行业 Agent 的 RAG
  • 基于Python 实现直线段生成算法和圆弧生成算法
  • 盘点2026年办公空间装修性价比高的公司,不容错过 - 工业设备
  • 国产手机溃败,苹果逆势增长,赶超苹果就是皇帝的新衣!仅国内市场就是给苹果提鞋都不配
  • 分析苏州GEO优化服务商渠道,推荐靠谱企业 - 工业品网
  • python基于微信小程序的中国古诗词在线智能学习分享系统的设计与实现
  • 模糊神经网络对123等级负荷进行功率分配
  • python基于微信小程序的旅游服务助手 景点 酒店 旅游规划 可视化
  • 基于 C++ OpenGL框架实现日地月运动模型动画
  • 总结排名靠前的防火涂料制造企业,昊优环保上榜 - 工业品牌热点
  • 【计算机毕业设计案例】基于SSM的小区物业管理系统设计与实现基于ssm的城市生活e家平台的设计与开发(程序+文档+讲解+定制)
  • Python:cell 对象
  • Java 状态机详解:三种实现方式优雅消灭 if-else 嵌套
  • 从人工到智能:AI 薪酬管理软件提升企业管理效能的底层逻辑
  • 2026郑州股权架构设计公司综合评估:6家顶尖机构深度解析 - 2026年企业推荐榜
  • 千匠B2B商城解决方案:全链路数字化能力重构渠道生态 - 圆圆小达人
  • 大米电视 6.6.9| 内含优质频道,港台高清不卡顿,超2000个直播频道
  • 多变量Pearson相关系数计算和Pearson相关系数的统计检验
  • 鲸鱼优化算法(WOA)文章复现:《改进鲸鱼优化算法在机械臂时间最优轨迹规划的应用_赵晶》 策略为
  • 根据变量之间变化的方向,相关关系可分为正相关(Positive Correlation)和负相关(Negative Correlation)
  • C#实现Modbus TCP通讯测试软件
  • 2026挖掘机培训行业报告:西北地区实训基地选择与就业前景解析 - 深度智识库
  • 支持单列、多列等布局自定义表单系统源码 带完整的搭建部署教程
  • leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal 根据前序和后序遍历构造二叉树