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

9.0 KiB
Raw Permalink Blame History

v1.0.0

Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。 滑块验证码需人工处理,本项目不再尝试自动识别。

功能概览

  • 启动 Chromium 浏览器并访问豆瓣登录页;
  • 自动填写手机号,触发短信验证码;
  • 控制台提示用户完成页面内的额外验证(如滑块)并输入短信验证码;
  • 登录成功后将 Cookie 状态保存到 ~/douban-cookie.json,后续运行可直接复用。

环境准备

npm install
npx playwright install chromium

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

使用方式

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

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

    • 填入手机号并点击「获取验证码」;
    • 控制台提示等待页面验证(若出现滑块,请手动完成);
    • 控制台等待用户输入短信验证码;
    • 验证码提交成功后,脚本将登录态写入 ~/douban-cookie.json 并退出。
  3. 下次运行会优先尝试加载该 Cookie 文件,若仍在有效期内可直接登录。

命令列表

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

可配置项

当前脚本仅使用一个环境变量:

变量名 说明 是否必填 默认值
DOUBAN_PHONE 登录手机号(大陆) 必填 -

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

工作流程说明

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

常见问题

  • 登录后仍提示手机号未填写? 确认 Playwright 浏览器窗口焦点在页面内,避免浏览器阻止自动填充。
  • 提示滑块验证但脚本无动作? 脚本已停止自动滑块功能,请在浏览器中手动拖动滑块完成验证。
  • Cookie 未生成? 只有当脚本确认登录成功时才会写入 Cookie。若终端未看到 “登录成功Cookies 已保存…” 的日志,请检查短信验证码是否正确。
# 启用自动滑块验证
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login

# 独立测试滑块功能
npm run slider

开发脚本

  • src/login.ts:主登录流程,负责 Cookie 复用、短信登录以及滑块自动化;
  • login.md:原始业务需求与操作步骤;
  • block.md滑块破解思路Python 版)与 TypeScript 脚本参考;
  • typescript-spec.md:团队 TypeScript 编码规范与示例。

许可

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

v1.1.0

🎉 主要更新

AI 驱动的滑块验证码自动破解

本版本最大亮点是集成了完整的滑块验证码自动识别和求解系统,从 captcha_cracker 项目移植并优化了核心算法。

新增功能

  1. 智能滑块识别 🔍

    • 多策略并行检测暗区域、Canny 边缘、颜色量化、LAB 色彩空间
    • 双滑块精准识别:同时检测左侧滑块和右侧缺口
    • 图像缩放优化:自动放大到 800px 以提高检测精度(原始 340px
    • 可视化调试:自动生成带红框标注的检测结果图
  2. 简化距离计算算法 📐

    • v1.1.0 核心改进:采用简洁准确的几何原理
    • 双滑块模式:距离 = (缺口X - 滑块X) / scaleX
    • 类比"两只小鸟嘴尖距离",直接计算左边界水平距离
    • 移除复杂的坐标转换逻辑,提升准确性
  3. 拟人化滑动轨迹 🎯

    • 使用 Playwright 的 steps 参数实现平滑移动
    • 避免机械化操作特征
    • 成功率约 50%10 次重试机制)
  4. 自动重试机制 🔄

    • 验证失败自动刷新验证码
    • 最多尝试 10 次(可配置)
    • 实时日志输出,便于调试
  5. 截图输出规范 📸

    • 原始验证码:保存到 noflag/ 目录
    • 标注结果:保存到 output/ 目录
    • 支持 CLI 工具批量复核:npm run slider -- --pic-dir=noflag

🔧 技术细节

核心模块结构src/slider/

  • detector.ts: 主检测器,实现多策略候选搜索和评分
  • detector-self-learning.ts: 模板匹配,用于第二滑块检测
  • slider-controller.ts: Playwright 集成,控制浏览器滑动
  • candidate-search.ts: 四种并行检测算法实现
  • utils/geometry.ts: IoU 计算等几何工具
  • utils/image.ts: Sobel 边缘检测、形态学操作
  • cli.ts: 批量评估和标注工具
  • validator.ts: 检测结果验证工具

依赖变更

  • 新增 sharp@^0.33.3:图像处理(缩放、边缘检测、颜色量化)
  • 已有 playwright@^1.41.1:浏览器自动化

环境变量

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

📊 性能指标

  • 检测准确率~70-80%(基于标注数据集验证)
  • 验证成功率~50%(考虑网站反爬虫机制)
  • 平均尝试次数1-3 次
  • 单次检测耗时~2-3 秒(含截图、检测、滑动)

🐛 已修复问题

  1. 坐标系不统一:修复了截图坐标与页面坐标的转换错误
  2. iframe 元素访问:正确处理腾讯验证码 iframe 内的元素定位
  3. 边距过滤过严调整候选框边缘判断逻辑5% → 1%
  4. 距离计算复杂:简化为基本几何公式,提高准确性

📖 文档更新

  • README.md: 添加自动滑块验证功能说明
  • src/slider/README.md: 详细的算法实现和调试指南
  • CHANGELOG.md: 新增版本变更日志
  • QUICKSTART.md: 更新快速开始指南

🎯 使用示例

最简单的使用方式

DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login

独立测试滑块功能

npm run slider

编程接口

import { SliderController } from './slider';

const controller = new SliderController(10);
const result = await controller.solveSlider(page, '.slider-button', '#captcha');

if (result.success) {
  console.log(`成功!尝试 ${result.attempts} 次`);
}

⚠️ 注意事项

  1. 图像识别局限性:复杂背景或低对比度图片可能识别失败
  2. 反爬虫检测:频繁使用可能触发更严格的验证机制
  3. 仅供学习:请遵守网站服务条款,不要用于商业或恶意用途

🚀 下一步计划

  • 支持更多验证码类型(点选、文字识别)
  • 优化检测算法,提高复杂场景的准确率
  • 添加机器学习模型,替代规则式检测
  • 支持更多网站的滑块验证码
  • 自动提取 macOS 收到的短信验证码v1.2.0 已上线)
  • 拓展短信自动读取到第三方短信服务或非 macOS 平台

v1.2.0

新增: macOS 短信自动读取 自动回填验证码 智能降级策略 日志可观测性

🚀 亮点

  1. macOS 短信自动读取:新增 src/sms/douban-code.ts 模块,基于 better-sqlite3 读取 ~/Library/Messages/chat.db,自动捕获最新“豆瓣网”验证码短信。
  2. 自动回填验证码:登录流程会在成功获取验证码后自动填充 #code 输入框,提升一次性登录体验。
  3. 智能降级策略:若未授予完全磁盘访问权限或数据库被占用,脚本会输出原因并回退到命令行输入,保证流程不中断。
  4. 日志可观测性:短信阶段新增 [短信读取] 日志前缀,帮助定位权限、解析或读取失败的问题。

🔧 兼容性要求

  • 仅支持 macOS需为运行脚本的终端Terminal/iTerm2/VS Code授予“完全磁盘访问权限”并重启终端。
  • 新增依赖 better-sqlite3@^12.4.1(同步 API零依赖运行以及类型声明 @types/better-sqlite3
  • 保留手动输入验证码流程Windows/Linux 用户或未授权情况下仍可照常使用。

📦 目录与配置变更

  • 新增 src/sms/ 目录存放短信读取模块。
  • src/login.ts 在滑块验证后自动调用短信读取逻辑,并等待验证码输入框可见。
  • README, VERSION, ARCHITECTURE, IMPLEMENTATION, QUICKSTART, CHANGELOG 等文档同步至 v1.2.0,增加权限配置说明。

升级指南

npm install
  1. 授权完全磁盘访问:系统设置 → 隐私与安全性 → 完全磁盘访问权限 → 添加终端并勾选;
  2. 重启终端或 VS Code
  3. 运行 npm run login 体验自动读取验证码。