2025-10-26 10:44:30 +08:00
2025-10-26 10:24:17 +08:00
2025-10-26 10:24:17 +08:00
2025-10-25 23:39:25 +08:00
2025-10-26 10:24:17 +08:00
2025-10-26 10:24:17 +08:00
2025-10-24 20:23:16 +08:00
2025-10-24 20:23:16 +08:00
2025-10-26 10:24:17 +08:00
2025-10-26 10:24:17 +08:00
2025-10-26 10:24:17 +08:00
2025-10-26 10:24:17 +08:00
2025-10-26 10:44:30 +08:00
2025-10-24 20:23:16 +08:00
2025-10-26 10:24:17 +08:00
2025-10-24 20:23:16 +08:00
2025-10-24 20:23:16 +08:00
2025-10-26 10:24:17 +08:00

douban-crawler

版本: v1.2.0

Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。已集成 AI 驱动的滑块验证码求解与 macOS 短信自动读取功能

核心功能

  • 🔐 自动登录: 支持短信验证码登录流程
  • 🧩 智能滑块识别: 基于图像处理算法自动识别和求解滑块验证码
  • 🎯 高成功率: 采用多策略检测算法暗区检测、边缘检测、颜色量化、LAB色彩空间分析
  • 📨 自动短信读取: 在 macOS 上读取信息 App 的最新验证码(需开启完全磁盘访问权限)
  • 🔄 自动重试: 验证失败时自动刷新并重试,最多 10 次
  • 📊 详细日志: 完整的调试信息和截图保存,便于问题追溯
  • 🖼️ 可视化调试: 自动标注检测到的滑块位置,保存带红框标记的图片
  • 🍪 Cookie 持久化: 自动保存登录态,下次可直接复用

环境准备

npm install
npx playwright install chromium

需要 Node.js ≥ 18。Playwright 会自动下载 Chromium首次运行请确保网络可访问 Playwright CDN。

💡 自动短信读取依赖 macOS 本地 ~/Library/Messages/chat.db,首次使用请为正在运行脚本的终端授予 完全磁盘访问权限

macOS 权限配置

  1. 打开“系统设置” → “隐私与安全性” → “完全磁盘访问权限”macOS Ventura 及以上Monterey 及更早版本在“系统偏好设置” → “安全性与隐私”)。
  2. 点击 + 号添加你运行脚本的终端(如 Terminal、iTerm2、VS Code
  3. 勾选启用后重新启动该终端,再次运行 npm run login
  4. 想确认权限是否生效,可在终端执行 ls ~/Library/Messages/chat.db 检查是否能够读取。

使用方式

  1. 设置手机号环境变量并运行登录脚本:

    DOUBAN_PHONE=13800000000 npm run login
    
  2. 启用自动滑块验证(可选):

    DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800000000 npm run login
    
  3. 浏览器会自动打开豆瓣登录页,脚本完成以下操作:

    • 填入手机号并点击「获取验证码」;
    • 如果启用了自动滑块验证,会自动检测并滑动;否则等待用户手动完成;
    • 在 macOS 上轮询“信息”App 的最新短信验证码,成功读取会自动填写;若读取失败则提示手动输入;
    • 验证码提交成功后,脚本将登录态写入 ~/douban-cookie.json 并退出。
  4. 下次运行会优先尝试加载该 Cookie 文件,若仍在有效期内可直接登录。

命令列表

命令 说明
npm run login 启动豆瓣登录流程并保存 Cookie

可配置项

当前脚本支持以下环境变量:

变量名 说明 是否必填 默认值
DOUBAN_PHONE 登录手机号(大陆) 必填 -
DOUBAN_AUTO_SLIDER 是否启用自动滑块验证1/true 可选 false

若需要更改 Cookie 保存位置,可在 src/login.ts 中调整 COOKIES_PATH 定义。

若不希望使用自动短信读取,可在终端手动输入验证码;无需额外配置即可回退。

工作流程说明

  1. 读取 DOUBAN_PHONE,未提供则直接退出;
  2. 若存在 ~/douban-cookie.json,加载后访问登录页并校验登录态;
  3. 如未登录,执行短信验证码流程,期间需手动处理页面可能出现的滑块或图形验证码;
  4. 在 macOS 上自动读取短信验证码,读取失败或授权不足时回退到终端输入;
  5. 验证通过后,将当前浏览器上下文的 storageState 写入 ~/douban-cookie.json

常见问题

  • 登录后仍提示手机号未填写? 确认 Playwright 浏览器窗口焦点在页面内,避免浏览器阻止自动填充。
  • 自动滑块验证失败? 系统会提示手动完成,或者尝试不启用自动滑块功能。
  • Cookie 未生成? 只有当脚本确认登录成功时才会写入 Cookie。若终端未看到 "登录成功Cookies 已保存…" 的日志,请检查短信验证码是否正确。
  • 短信读取失败? 确认已在系统设置中为终端授予“完全磁盘访问权限”,并重新启动终端;或直接在提示后手动输入验证码。

滑块验证模块

本项目包含了从 captcha_cracker 移植并优化的滑块检测功能,位于 src/slider/ 目录。

详细说明请查看 src/slider/README.md

滑块验证工作流程

  1. 自动检测: 点击"获取验证码"后自动检测滑块验证码窗口
  2. 图像采集: 截取验证码图片并放大到 800px 宽度以提高识别精度
  3. 多策略检测:
    • 暗区检测:识别滑块缺口的阴影区域
    • 边缘检测:使用 Canny 算法识别轮廓
    • 颜色量化:分析色彩分布找出异常区域
    • LAB 色彩空间:在更符合人类视觉的空间中检测差异
  4. 双滑块识别: 同时检测左侧滑块和右侧缺口,计算精确距离
  5. 距离计算:
    • 双滑块模式:距离 = (缺口X - 滑块X) / scaleX
    • 单滑块模式:基于 DOM 位置和图像分析综合计算
  6. 拟人化滑动: 模拟真实人类操作的加速-匀速-减速轨迹
  7. 结果验证: 检测成功标识或窗口消失,失败则自动刷新重试(最多 10 次)
  8. 可视化输出: 在 output/noflag/ 目录保存带红框标记的检测结果图片

滑块识别算法

核心算法移植自 captcha_cracker 项目,包括:

  • 候选框搜索 (detection/candidate-search.ts): 四种策略并行搜索可疑区域
  • 边界框优化 (detector.ts): 使用 Canny 边缘检测精确定位
  • 自学习模板匹配 (detector-self-learning.ts): 动态学习滑块模板提高准确率
  • 几何与图像工具 (utils/): IoU 计算、形态学操作、Sobel 算子等

调试与问题排查

所有截图和检测结果保存在:

  • output/: 常规调试输出
  • noflag/: 完整尺寸800px的检测图片
  • 文件命名格式:captcha-{timestamp}.pngcaptcha-{timestamp}-detected.png

查看 -detected.png 文件可以确认:

  • 红框标记的位置是否准确识别了滑块缺口
  • 如有两个框,左边的应该是滑块,右边的是缺口

声明

该项目仅供学习与功能验证,请勿用于违反豆瓣平台服务条款的场景。开发者需自行承担使用风险。

开发文档

  • src/login.ts:主登录流程,负责 Cookie 复用、短信登录以及滑块自动化;
  • src/sms/macOS 短信读取模块,解析 chat.db 自动提取验证码;
  • src/slider/:滑块验证模块,包含检测、移动等完整功能;
  • ARCHITECTURE.md:整体架构与流程说明;
  • IMPLEMENTATION.md:关键实现细节记录;
  • login.md:原始业务需求与操作步骤;
  • typescript-spec.md:团队 TypeScript 编码规范与示例。

许可

本项目仅用于功能验证和学习,使用时请遵守目标网站的服务条款。

Description
Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。已集成 AI 驱动的滑块验证码求解与 macOS 短信自动读取功能。
https://biboer.cn
Readme 11 MiB
v1.2.0 Latest
2025-10-26 10:44:35 +08:00
Languages
TypeScript 91.7%
Shell 8.3%