Skip to content

自动解决滑动验证码(如滑动拼图)的方案

Notifications You must be signed in to change notification settings

Ventaly/slider-verification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

自助验证码滑动解决方案

本项目实现了一个使用Python和Playwright自动解决滑动验证码(如滑动拼图)的方案,主要通过图像处理技术识别缺口位置,并模拟人类滑动行为完成滑动验证。

项目概述

本项目提供了一个自动化解决方案,用于处理滑动验证码。通过图像处理技术,我们能够识别出滑块的缺口位置,并模拟人类的滑动行为来自动完成验证。

针对的问题

针对以下问题,本项目提供了相应的解决方案:

  1. 透明区域干扰:透明区域可能会干扰图像匹配算法,使得滑块的缺口位置难以识别。通过图像处理技术,如自适应阈值化和边缘检测,增强图像对比度并去除透明区域的影响。
  2. 分辨率不一致:当图片分辨率与页面分辨率不一致时,通过计算调整页面比例来解决匹配问题。
  3. OpenCV匹配:使用OpenCV进行图像匹配是解决缺口位置识别问题的关键。通过模板匹配算法,如cv2.matchTemplate,找到滑块在背景图中的最佳匹配位置。

项目结构

. ├── README.md # 项目说明文件 ├── GetImage.py # 用于获取并下载背景和拼图块图片 ├── solve_slider.py # 主要的滑动验证码解决代码 └── requirements.txt # Python依赖包

依赖

在开始使用本项目之前,请确保已经安装了以下依赖:

  • playwright:用于浏览器自动化。
  • opencv-python:用于图像处理。
  • numpy:用于数值计算。
  • asyncio:用于异步编程。

您可以通过以下命令安装依赖:

pip install -r requirements.txt

主要功能

1. 查找缺口位置

功能描述find_gap函数是核心算法的一部分,它利用OpenCV库对背景图片和拼图块图片进行图像处理,以精确检测出拼图缺口的位置信息。

实现步骤

  • 图像预处理:首先对背景和拼图块图片应用高斯模糊,以减少图像噪声。随后,通过Canny边缘检测算法提取图像轮廓,为后续的轮廓分析做准备。
  • 轮廓筛选:在提取的轮廓中,筛选出与缺口形状相匹配的轮廓,这是识别缺口位置的关键步骤。
  • 缺口定位:计算筛选出的轮廓中心与滑块中心的距离,这个距离将用于确定滑块需要移动的具体距离。

2. 生成滑动轨迹

功能描述generate_track函数负责根据缺口位置与滑块中心的距离,生成一个模拟人类滑动行为的轨迹。

实现步骤

  • 轨迹模拟:考虑到人类滑动时的非线性特性,如惯性和微调动作,该函数生成一条平滑且自然的滑动轨迹。
  • 轨迹优化:为了模拟更真实的人类行为,轨迹中会加入一些随机的小幅度波动,以避免被验证码系统识别为自动化操作。

3. 解决滑动验证码

功能描述solve_slider函数实现了自动化解决滑动验证码的完整流程,从下载图片到模拟鼠标拖动完成滑动操作。

实现步骤

  • 图片下载:首先下载背景和拼图块图片,这是后续处理的基础。
  • 缺口定位:调用find_gap函数定位缺口位置,获取滑块需要移动的距离。
  • 滑动计算:根据缺口位置计算出滑块的滑动距离,为模拟鼠标拖动做准备。
  • 模拟滑动:使用Playwright库模拟鼠标拖动操作,根据生成的滑动轨迹完成滑块的移动,从而解决滑动验证码。

使用方法

1. 准备工作

在使用本项目之前,请确保您的环境中安装了Playwright和其他依赖。

python -m playwright install

运行代码

首先确保您已配置好Playwright环境。然后在Python中执行solve_slider函数,传入需要验证的页面。以下是如何调用的示例:

import asyncio
from solve_slider import solve_slider

async def main():
    # 启动Playwright浏览器实例并打开目标页面
    browser = await playwright.chromium.launch(headless=False)
    page = await browser.new_page()

    # 打开目标页面
    await page.goto('目标验证页面URL')

    # 调用滑动验证码解决函数
    await solve_slider(page)

    # 关闭浏览器
    await browser.close()

# 运行
asyncio.run(main())

注意事项

在执行solve_slider函数时,确保您的网络连接稳定,以便下载验证图片。 需要确保页面上滑动验证码元素的定位信息是准确的。

贡献

如果您有任何建议或发现bug,欢迎提交issue或PR。

许可证

MIT License.

About

自动解决滑动验证码(如滑动拼图)的方案

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages