Files
douban-login/VERSION.md
2025-10-26 10:24:17 +08:00

5.7 KiB
Raw Permalink Blame History

版本信息

当前版本v1.2.0

发布日期2025-10-26

主要特性

📨 macOS 短信自动读取v1.2.0

  • 基于 better-sqlite3 读取 ~/Library/Messages/chat.db 的最新验证码短信
  • 智能忽略旧消息,仅对新到达的“豆瓣网”验证码进行解析
  • 使用正则解析 验证码xxxx 格式,支持 4-6 位验证码
  • 自动回填验证码输入框,失败时即时回退到手动输入
  • ⚠️ 仅支持 macOS并需要为终端授予“完全磁盘访问权限”

🎯 AI 驱动的滑块验证码自动破解v1.1.0

  • 多策略并行检测暗区域、边缘、颜色量化、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 去重:

  1. 暗区域检测:查找亮度 < 100 的暗色区域
  2. Canny 边缘检测:查找边缘密集区域
  3. 颜色量化K-means 聚类找独特色块
  4. LAB 色彩空间:感知均匀的色彩空间检测

文件结构

graph TD
  root[src/]
  root --> slider_dir[slider/<br/>滑块验证模块]
  slider_dir --> slider_detector[detector.ts<br/>主检测器]
  slider_dir --> slider_self[detector-self-learning.ts<br/>模板匹配]
  slider_dir --> slider_controller[slider-controller.ts<br/>Playwright 集成]
  slider_dir --> slider_candidate[candidate-search.ts<br/>多策略检测]
  slider_dir --> slider_geometry[geometry.ts<br/>IoU 计算]
  slider_dir --> slider_image[image.ts<br/>Sobel 边缘]
  root --> sms_dir[sms/<br/>macOS 短信读取模块]
  sms_dir --> sms_code[douban-code.ts<br/>解析 chat.db]
  root --> noflag[noflag/<br/>原始验证码截图]
  root --> output_dir[output/<br/>标注结果]

依赖项

  • playwright: ^1.41.1(浏览器自动化)
  • sharp: ^0.33.3(图像处理)
  • better-sqlite3: ^12.4.1(本地 SQLite 查询,读取短信)
  • typescript: ^5.4.2

环境变量

DOUBAN_AUTO_SLIDER=1     # 启用自动滑块验证
DOUBAN_PHONE=手机号      # 登录手机号(必填)

自动短信读取不需要新增环境变量,保持终端前台即可。

已知限制

  1. 图像识别准确率:约 70-80%,复杂背景或低对比度图片识别率较低
  2. 验证成功率:约 50%,受反爬虫机制影响
  3. 仅供学习:请遵守网站服务条款,不要用于商业或恶意用途
  4. 平台限制:短信自动读取仅适用于 macOS且需为终端授予完全磁盘访问权限

相关文档

升级指南

从 v1.1.0 升级到 v1.2.0

新增依赖

npm install

系统配置

  • macOS “隐私与安全性” → “完全磁盘访问权限”,添加并勾选运行脚本的终端;
  • 修改后需重新启动终端或 VS Code。

代码变更

  • src/login.ts 自动调用 waitForDoubanCode 读取短信;
  • 新增 src/sms/ 模块负责解析 chat.db
  • 读取失败会保留手动输入流程,无需额外开关。

回退策略

  • 若不希望开启自动读取,可在提示出现时直接手动输入验证码,无需修改代码。

从 v1.0.0 升级到 v1.1.0

新增依赖

npm install

新增环境变量(可选):

export DOUBAN_AUTO_SLIDER=1

新增目录

  • noflag/:原始验证码截图会自动保存到这里
  • output/:标注结果会自动保存到这里

无需更改的部分

  • DOUBAN_PHONE 环境变量用法不变
  • ~/douban-cookie.json Cookie 文件路径不变
  • npm run login 命令用法不变

新增功能

  • 设置 DOUBAN_AUTO_SLIDER=1 启用自动滑块验证
  • 使用 npm run slider 独立测试滑块功能
  • 使用 npm run slider -- --pic-dir=noflag 批量复核截图

下一步计划

  • 支持更多验证码类型(点选、文字识别)
  • 引入机器学习模型提高准确率
  • 优化轨迹模拟,降低被识别风险
  • 支持更多网站的滑块验证码

v1.2.0 - AI 滑块 + macOS 短信自动读取,让登录更丝滑 🎉