3.5 KiB
3.5 KiB
架构说明
本文档梳理项目中的主要模块、职责划分以及核心流程,帮助维护者快速了解整体结构。当前版本仅关注短信验证码登录与 Cookie 持久化,滑块验证码需人工操作。
模块概览
├── README.md // 使用说明与运行指引
├── ARCHITECTURE.md // 架构概览与流程说明(本文档)
├── IMPLEMENTATION.md // 关键实现细节记录
├── login.md // 早期需求与操作步骤
├── src/
│ └── login.ts // 豆瓣登录脚本入口(Cookie 复用 + 短信登录)
└── typescript-spec.md // 团队 TypeScript 编码规范
登录流程分层
┌────────────────────────────────────┐
│ main() │
│ - 启动 Chromium │
│ - 复用或创建上下文 │
│ - 调用 loginWithSms() │
│ - 保存 Cookies │
└────────────────────────────────────┘
│
┌────────────────▼──────────────────┐
│ loginWithSms() │
│ - 输入手机号 │
│ - 触发短信验证码 │
│ - 提示用户完成页面额外验证 │
│ - 等待并提交短信验证码 │
│ - 校验是否登录成功 │
└────────────────────────────────────┘
│
┌────────────────▼──────────────────┐
│ isLoggedIn() │
│ - 检查关键 Cookie(dbcl2) │
│ - 确认登录表单是否仍然可见 │
└────────────────────────────────────┘
prepareContext():负责加载已有 Cookie、创建新上下文以及兜底跳转登录页。loginWithSms():串联短信登录流程,涵盖用户输入与结果确认。isLoggedIn():封装判定逻辑,避免各处重复编写 Cookie/页面检查。
依赖与交互
- Playwright:启动浏览器、操作页面元素、持久化
storageState。 - Node.js:文件读写、路径与环境变量处理。
- readline:在控制台等待用户输入短信验证码。
- 环境变量:当前仅使用
DOUBAN_PHONE指定登录手机号。 ~/douban-cookie.json:保存登录态的 storageState 文件,下次运行直接复用。
数据流
- 读取
DOUBAN_PHONE,未配置则终止; - 若存在本地 Cookie 文件,加载后访问登录页以确认是否仍然有效;
- 无有效登录态时执行短信登录:
- Playwright 填写手机号并请求验证码;
- 用户在浏览器中手动完成滑块等验证;
- 控制台输入短信验证码并提交;
- 登录成功后调用
context.storageState()写入~/douban-cookie.json; - 浏览器关闭,后续脚本可直接复用该文件。
日志与错误处理
- 关键步骤均在控制台打印提示,便于追踪流程;
- 验证码相关操作采用提示 +
prompt方式等待人工输入; - 登录失败或异常会设置
process.exitCode并输出详细错误信息。