Files
douban-login/ARCHITECTURE.md
2025-10-24 22:25:24 +08:00

3.5 KiB
Raw Blame History

架构说明

本文档梳理项目中的主要模块、职责划分以及核心流程,帮助维护者快速了解整体结构。当前版本仅关注短信验证码登录与 Cookie 持久化,滑块验证码需人工操作。

模块概览

├── README.md              // 使用说明与运行指引
├── ARCHITECTURE.md        // 架构概览与流程说明(本文档)
├── IMPLEMENTATION.md      // 关键实现细节记录
├── login.md               // 早期需求与操作步骤
├── src/
│   └── login.ts           // 豆瓣登录脚本入口Cookie 复用 + 短信登录)
└── typescript-spec.md     // 团队 TypeScript 编码规范

登录流程分层

┌────────────────────────────────────┐
│ main()                             │
│  - 启动 Chromium                   │
│  - 复用或创建上下文                │
│  - 调用 loginWithSms()             │
│  - 保存 Cookies                    │
└────────────────────────────────────┘
                 │
┌────────────────▼──────────────────┐
│ loginWithSms()                    │
│  - 输入手机号                     │
│  - 触发短信验证码                 │
│  - 提示用户完成页面额外验证       │
│  - 等待并提交短信验证码           │
│  - 校验是否登录成功               │
└────────────────────────────────────┘
                 │
┌────────────────▼──────────────────┐
│ isLoggedIn()                      │
│  - 检查关键 Cookiedbcl2        │
│  - 确认登录表单是否仍然可见        │
└────────────────────────────────────┘
  • prepareContext():负责加载已有 Cookie、创建新上下文以及兜底跳转登录页。
  • loginWithSms():串联短信登录流程,涵盖用户输入与结果确认。
  • isLoggedIn():封装判定逻辑,避免各处重复编写 Cookie/页面检查。

依赖与交互

  • Playwright:启动浏览器、操作页面元素、持久化 storageState
  • Node.js:文件读写、路径与环境变量处理。
  • readline:在控制台等待用户输入短信验证码。
  • 环境变量:当前仅使用 DOUBAN_PHONE 指定登录手机号。
  • ~/douban-cookie.json:保存登录态的 storageState 文件,下次运行直接复用。

数据流

  1. 读取 DOUBAN_PHONE,未配置则终止;
  2. 若存在本地 Cookie 文件,加载后访问登录页以确认是否仍然有效;
  3. 无有效登录态时执行短信登录:
    • Playwright 填写手机号并请求验证码;
    • 用户在浏览器中手动完成滑块等验证;
    • 控制台输入短信验证码并提交;
  4. 登录成功后调用 context.storageState() 写入 ~/douban-cookie.json
  5. 浏览器关闭,后续脚本可直接复用该文件。

日志与错误处理

  • 关键步骤均在控制台打印提示,便于追踪流程;
  • 验证码相关操作采用提示 + prompt 方式等待人工输入;
  • 登录失败或异常会设置 process.exitCode 并输出详细错误信息。