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

72 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 架构说明
本文档梳理项目中的主要模块、职责划分以及核心流程,帮助维护者快速了解整体结构。当前版本仅关注短信验证码登录与 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` 并输出详细错误信息。