Files
douban-login/ARCHITECTURE.md
2025-10-24 20:23:16 +08:00

4.4 KiB
Raw Blame History

架构说明

本文档描述项目中的主要模块、职责划分以及关键流程,帮助维护者快速理解整体结构。

模块概览

├── README.md              // 使用说明与命令入口
├── ARCHITECTURE.md        // 架构与流程说明(本文档)
├── login.md               // 需求与步骤原始描述
├── block.md               // 滑块破解背景与参考脚本
├── src/
│   ├── login.ts           // 豆瓣登录主流程Cookie 复用、短信登录、滑块自动化)
│   └── slider.ts          // 滑块模拟工具函数与命令行入口
└── typescript-spec.md     // TypeScript 编码规范与示例

登录流程分层

┌─────────────────────────────────────────────┐
│ main()                                      │
│  - 创建浏览器                               │
│  - 复用或创建上下文                         │
│  - 调用 loginWithSms()                      │
│  - 保存 Cookies                             │
└─────────────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────┐
│ loginWithSms()                               │
│  - 输入手机号                                │
│  - 点击“获取验证码”                          │
│  - trySolveSlider() 自动滑块(可选)         │
│  - 提示人工输入短信验证码                   │
│  - 提交并校验登录状态                       │
└────────────────▲────────────────────────────┘
                 │
┌────────────────▼────────────────────────────┐
│ trySolveSlider()                             │
│  - locateSlider() 识别滑块所在 frame/元素    │
│  - inferSliderDistance() 推测拖动距离        │
│  - performSlide() 实际模拟拖动(来自 slider.ts│
│  - 检查滑块成功标记                          │
└─────────────────────────────────────────────┘
  • prepareContext():独立负责 Cookie 复用与上下文创建。
  • isLoggedIn():封装登录状态检测逻辑,避免主流程重复判断。
  • slider.ts:抽离通用滑块控制方法,既服务登录流程,也支持命令行调试。

依赖与交互

  • Playwright浏览器自动化
  • Node.js运行环境、文件/路径操作;
  • readline控制台交互输入验证码
  • 环境变量:控制手机号、滑块自动化开关与参数;
  • ~/cookies.json:持久化登录态,供下一次运行直接复用。

扩展点

  • 滑块识别sliderHandleSelectorssliderTrackSelectors 可按需扩充、覆盖,以支持不同验证码厂商。
  • 距离计算:先截取背景图与拼图块做模板匹配确定缺口位置,必要时退回二值化列分析,再配合多组偏移反复尝试;也可用 DOUBAN_SLIDER_DISTANCE / DOUBAN_SLIDER_OFFSETS 手动覆盖。
  • 距离推断:默认通过轨道宽度估算,特殊情况可直接设置 DOUBAN_SLIDER_DISTANCE
  • 验证码输入:目前依赖人工短信验证码,可接入短信网关或 API 进一步自动化。
  • 多账号管理:现仅支持单账号,可通过配置文件或参数改造为批量登录。

数据流

  1. 启动脚本读取 DOUBAN_PHONE、Cookies 路径等基础配置;
  2. 初始化浏览器上下文,必要时进入登录页面;
  3. 提交手机号,触发滑块验证;
  4. 若启用自动滑块,定位组件并拖动;否则提示人工操作;
  5. 读取短信验证码,提交登录表单;
  6. 验证成功后将 storageState 写入 cookies.json
  7. 后续执行逻辑复用当前登录态或退出浏览器。

日志与错误处理

  • 主流程捕获未处理异常并输出错误信息;
  • 自动滑块阶段出现异常时仅发出警告并回退到人工操作;
  • CLI 提示说明每一步的执行结果,便于排查问题。