4.1 KiB
4.1 KiB
版本信息
当前版本:v1.1.0
发布日期:2025-10-25
主要特性
🎯 AI 驱动的滑块验证码自动破解
- ✅ 多策略并行检测(暗区域、边缘、颜色量化、LAB 色彩空间)
- ✅ 双滑块精准识别(左侧滑块 + 右侧缺口)
- ✅ 简化的距离计算算法:
距离 = (缺口X - 滑块X) / scaleX - ✅ 拟人化滑动轨迹(Playwright steps 参数)
- ✅ 自动重试机制(最多 10 次)
- ✅ 可视化调试(红框标注输出到
output/目录)
📊 性能指标
- 检测准确率:~70-80%
- 验证成功率:~50%(含重试)
- 平均尝试次数:1-3 次
- 单次检测耗时:~2-3 秒
🚀 快速开始
# 启用自动滑块验证
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login
# 独立测试滑块功能
npm run slider
# 批量复核历史截图
npm run slider -- --pic-dir=noflag
核心创新
"两只小鸟距离"原理
v1.1.0 最重要的突破是简化了距离计算算法:
// v1.0.0: 需要人工完成滑块
// v1.1.0: 自动计算并拖动
// 双滑块模式(推荐)
const distance = (box2.x - box1.x) / scaleX;
// 单滑块模式(兜底)
const distance = box.x / scaleX;
原理:就像计算两只小鸟嘴尖的水平距离,直接用右侧缺口的 X 坐标减去左侧滑块的 X 坐标,再除以图像缩放比例,就得到了滑块需要移动的距离。
图像缩放优化
- 原始验证码:340x191 像素
- 检测图像:800x449 像素(scaleX ≈ 2.35)
- 提高小尺寸滑块的检测精度
多策略并行检测
并行运行四种算法,然后 IoU 去重:
- 暗区域检测:查找亮度 < 100 的暗色区域
- Canny 边缘检测:查找边缘密集区域
- 颜色量化:K-means 聚类找独特色块
- LAB 色彩空间:感知均匀的色彩空间检测
文件结构
src/slider/ # 滑块验证模块
├── detector.ts # 主检测器
├── detector-self-learning.ts # 模板匹配
├── slider-controller.ts # Playwright 集成
├── candidate-search.ts # 多策略检测
├── geometry.ts # IoU 计算
└── image.ts # Sobel 边缘检测
noflag/ # 原始验证码截图
output/ # 红框标注结果
依赖项
- playwright: ^1.41.1(浏览器自动化)
- sharp: ^0.33.3(图像处理)
- typescript: ^5.4.2
环境变量
DOUBAN_AUTO_SLIDER=1 # 启用自动滑块验证
DOUBAN_PHONE=手机号 # 登录手机号(必填)
已知限制
- 图像识别准确率:约 70-80%,复杂背景或低对比度图片识别率较低
- 验证成功率:约 50%,受反爬虫机制影响
- 仅供学习:请遵守网站服务条款,不要用于商业或恶意用途
相关文档
- README.md - 项目总览
- QUICKSTART.md - 快速开始指南
- CHANGELOG.md - 详细更新日志
- ARCHITECTURE.md - 架构说明
- IMPLEMENTATION.md - 实现细节
- src/slider/README.md - 滑块模块文档
升级指南
从 v1.0.0 升级到 v1.1.0
新增依赖:
npm install
新增环境变量(可选):
export DOUBAN_AUTO_SLIDER=1
新增目录:
noflag/:原始验证码截图会自动保存到这里output/:标注结果会自动保存到这里
无需更改的部分:
DOUBAN_PHONE环境变量用法不变~/douban-cookie.jsonCookie 文件路径不变npm run login命令用法不变
新增功能:
- 设置
DOUBAN_AUTO_SLIDER=1启用自动滑块验证 - 使用
npm run slider独立测试滑块功能 - 使用
npm run slider -- --pic-dir=noflag批量复核截图
下一步计划
- 支持更多验证码类型(点选、文字识别)
- 引入机器学习模型提高准确率
- 优化轨迹模拟,降低被识别风险
- 支持更多网站的滑块验证码
v1.1.0 - 从手动验证到 AI 自动化的飞跃 🎉