三步破解B站滑块验证码:awesome-python-login-model的截图识别与像素对比实战教程
2026/9/19 9:28:59 网站建设 项目流程

三步破解B站滑块验证码:awesome-python-login-model的截图识别与像素对比实战教程

【免费下载链接】awesome-python-login-model😮python模拟登陆一些大型网站,还有一些简单的爬虫,希望对你们有所帮助❤️,如果喜欢记得给个star哦🌟项目地址: https://gitcode.com/gh_mirrors/aw/awesome-python-login-model

对于想用Python 模拟登录的爬虫新手来说,B站滑块验证码是最经典、最容易上手的入门目标。本项目 awesome-python-login-model 收录了大量大型网站的 Python 模拟登录与爬虫示例,其中 bilibili/bilibili.py 仅用约 200 行代码,就通过截图识别 + 像素对比自动完成B站登录,据项目作者测试成功率高达 98%。本文将带你三步拆解它的实现原理,即使你是爬虫初学者也能轻松读懂。

一、B站滑块验证码:为什么是爬虫入门首选?

滑块验证码(极验类)是各大网站最常见的反爬手段。它的核心机制是:

  1. 页面上出现一张原图和一张带缺口的图
  2. 用户需要把滑块拖到缺口位置
  3. 后台会校验你的拖动轨迹是否像真人

而破解思路可以简化为三个问题:

  • 缺口在哪里?→ 截图 + 像素对比,逐列扫描
  • 滑块在哪?→ Selenium 定位 DOM 元素
  • 怎么拖才像人?→ 物理加速/减速公式生成随机轨迹

这正是 BiliBili 类所做的事。

二、准备工作:克隆仓库并运行脚本

克隆仓库并进入 B 站登录目录:

git clone https://gitcode.com/gh_mirrors/aw/awesome-python-login-model cd awesome-python-login-model/bilibili pip install selenium Pillow python3 bilibili.py

运行后按提示输入账号密码,脚本会自动打开 Chrome 并尝试登录。运行成功后,终端会打印缺口坐标、移动轨迹列表,并最终输出success

⚠️避坑提示:脚本注释中明确要求,电脑显示缩放比例需为 100%,否则验证码图片定位会出现偏差(见 bilibili.py)。

三、第一步:两次截图,锁定缺口位置

整个识别过程建立在两次网页截图之上,核心在 get_screenshot 方法:

截图时机目的
鼠标悬停在滑块上得到未点击的原图状态
鼠标点击按住滑块后得到缺口清晰显示的缺块图

拿到两张截图后,get_position 通过定位验证码容器的 DOM 位置(gt_box),算出验证码区域的上下左右四个坐标,get_geetest_image 再按坐标把两张截图裁剪captcha1.png(原图)和captcha2.png(缺块图)。

这一步的精髓是:不解析接口、不请求图片 URL,直接用浏览器截图裁剪,简单粗暴且不易失效。

四、第二步:像素对比,逐列扫描缺口

缺口定位是全文最精彩的部分,只有两步:

1. 判断单个像素是否相等— is_pixel_equal

取出两张图同一坐标的 RGB 三通道像素,只要红、绿、蓝三通道差值都小于 100,就认为该像素"相同":

threshold = 100 if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold ...

阈值 100 是容错设计——两张截图不可能完全一致,留点余量才能稳定识别。

2. 从左到右扫描第一个"不等"列— get_gap

left = 60开始逐列、逐行扫描,第一列出现像素不一致的 x 坐标,就是缺口的左边缘。为什么要从 60 开始?因为滑块初始位置在左侧约 60px 处,这段区域本来就不对齐,需要忽略。

找到left后,它就是滑块需要移动的距离

五、第三步:模拟人类轨迹,拖过滑块

直接匀速拖到缺口必被识别为机器,所以 get_track 用物理运动学公式生成"先加速、后减速"的拟人轨迹:

  • 前 2/3 路程:随机加速度a = 1~3,快速接近
  • 后 1/3 路程:加速度变为-3 ~ -5,模拟松手前的减速
  • 故意多滑 10px 再回退distance += 10,配合末尾的负位移,还原真人"过冲再修正"的手感

最后 move_button 用 Selenium 的ActionChains按住滑块,按轨迹列表逐段move_by_offset,每段之间休眠 0.5ms,模拟真实鼠标事件。

容错机制:crack 串起整个流程——输入账号密码 → 获取滑块 → 截取验证码 → 计算轨迹 → 拖动。若 5 秒内没等到页面出现"验证通过"字样,说明本次失败,脚本会自动重试,最多 3 次

六、关键细节清单与学习建议

想让成功率稳定在 98%,这几个细节别漏掉:

  • 🖥️ 系统缩放保持100%,截图坐标才准确
  • 🎭 启动 Chrome 时加了excludeSwitches: ['enable-automation'](第 31-35 行),避免被识别为自动化浏览器
  • 🔁 失败自动重试 3 次,像素对比本身有一定误判率
  • ⏱️ 各步骤间保留sleep,模拟人类操作节奏

学会这套"截图 → 像素对比 → 拟人轨迹"的组合拳后,同类滑块验证码基本都能套用。项目里还有更多登录/爬虫实战可继续练手:

  • baidu/baidu.py:百度模拟登录 + 验证码处理
  • qqzone/qq_zone.py:QQ空间登录(难度更高的 JS 加密场景)
  • douban/douban_spider.py:豆瓣爬虫入门
  • liepin/liepin_login.py:猎聘登录与 Scrapy 爬虫结合

一个高效的实战思路是:像本项目这样用 Selenium 完成登录拿到 Cookie 后,把 Cookie 保存下来,后续用 requests 或 Scrapy 直接带着 Cookie 爬数据——登录慢不要紧,采集速度才是要命的关键。祝你在 Python 模拟登录与爬虫的世界里玩得开心!

【免费下载链接】awesome-python-login-model😮python模拟登陆一些大型网站,还有一些简单的爬虫,希望对你们有所帮助❤️,如果喜欢记得给个star哦🌟项目地址: https://gitcode.com/gh_mirrors/aw/awesome-python-login-model

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询