update at 2025-10-26 10:24:17

This commit is contained in:
douboer
2025-10-26 10:24:17 +08:00
parent bd8da1d56a
commit 06ac359162
14 changed files with 934 additions and 154 deletions

View File

@@ -1,25 +1,28 @@
# 登录脚本实现笔记v1.1.0
# 登录脚本实现笔记v1.2.0
本文记录当前版本豆瓣登录脚本的实现细节、关键函数以及后续可扩展点。v1.1.0 版本集成了完整的滑块验证码自动破解功能,大幅提升自动化程度
本文记录当前版本豆瓣登录脚本的实现细节、关键函数以及后续可扩展点。v1.1.0 引入了完整的滑块验证码自动破解能力v1.2.0 在此基础上新增 macOS 短信自动读取与回填流程,让整体登录体验更加无感
## 文件结构
```
src/
├── login.ts # Playwright 入口脚本
└── slider/ # v1.1.0 新增滑块验证模块
├── index.ts
├── types.ts
├── detector.ts
├── detector-self-learning.ts
├── slider-controller.ts
├── cli.ts
├── validator.ts
├── detection/
│ └── candidate-search.ts
└── utils/
├── geometry.ts
└── image.ts
```mermaid
graph TD
src_dir[src/]
src_dir --> login_ts[login.ts<br/>Playwright 入口脚本]
src_dir --> sms_dir[sms/<br/>v1.2.0 新增短信读取模块]
sms_dir --> sms_code[douban-code.ts]
src_dir --> slider_dir[slider/<br/>v1.1.0 滑块验证模块]
slider_dir --> slider_index[index.ts]
slider_dir --> slider_types[types.ts]
slider_dir --> slider_detector[detector.ts]
slider_dir --> slider_self[detector-self-learning.ts]
slider_dir --> slider_controller[slider-controller.ts]
slider_dir --> slider_cli[cli.ts]
slider_dir --> slider_validator[validator.ts]
slider_dir --> slider_detection[detection/]
slider_dir --> slider_utils[utils/]
slider_detection --> slider_candidate[candidate-search.ts]
slider_utils --> slider_geometry[geometry.ts]
slider_utils --> slider_image[image.ts]
```
辅助文档位于项目根目录:
@@ -30,7 +33,7 @@ src/
- `CHANGELOG.md`:版本更新日志
- `login.md`:早期需求说明,可作为手动操作参考
## 核心流程v1.1.0
## 核心流程v1.2.0
1. **读取配置**
- 通过 `process.env.DOUBAN_PHONE` 获取手机号,缺失时直接退出
@@ -50,7 +53,8 @@ src/
- 调用检测算法识别滑块位置
- 计算滑动距离并执行拖动
- 验证成功后继续,失败则重试(最多 10 次)
- 通过 `prompt` 等待用户输入短信验证码并提交
- **[v1.2.0]** 调用 `waitForDoubanCode()` 轮询 `chat.db`,解析验证码
- 若读取超时或权限不足,提示用户通过 `prompt` 手动输入验证码
- 等待 Playwright 检测到页面离开登录地址或抛出超时
4. **确认状态并写入 Cookie 文件**
@@ -74,13 +78,38 @@ src/
- 页面操作由脚本自动完成(填手机号、点击按钮)
- **[v1.1.0]** 滑块验证自动处理(启用 `DOUBAN_AUTO_SLIDER=1` 时)
- 短信验证码输入由用户处理
- **[v1.2.0]** 优先自动读取短信验证码,失败时降级到命令行输入
- 函数内部对提交过程设置合理的等待时间,避免过早关闭浏览器
### `waitForDoubanCode(options?: WaitForCodeOptions)`
负责从 macOS 信息数据库读取最新的验证码短信:
- 使用 `better-sqlite3` 以只读方式打开 `~/Library/Messages/chat.db`
- 记录初始最新消息的 `ROWID`,避免重复解析旧短信
- 周期性查询包含“豆瓣”“验证码”关键词的消息并解析其中的 4-6 位验证码
- 成功返回 `{ code, message }`,失败在超时后抛出异常供调用方降级处理
- `options` 支持 `timeoutMs``pollIntervalMs` 以及 `logger` 回调,便于定制等待时长和日志输出
### `main()`
作为 CLI 入口,负责整体 orchestrate校验配置 → 启动浏览器 → 调用上述函数 → 捕获异常并设置 `process.exitCode`
## v1.2.0 新增能力
1. **短信自动读取模块**
- 新增 `src/sms/douban-code.ts`,通过 `better-sqlite3` 查询 macOS “信息”数据库;
- 解析满足“豆瓣 + 验证码”关键字的最新短信,返回验证码及原始消息。
2. **验证码自动回填**
- `login.ts` 显式等待 `input#code` 可见后填入验证码;
- 日志输出增加 `[短信读取]` 前缀,便于排查权限或解析问题;
- 超时或数据库不可用时抛出异常,交由上层降级到 `prompt`
3. **依赖与配置更新**
- 新增 `better-sqlite3` 依赖及类型声明;
- 文档统一说明 macOS 完全磁盘访问权限要求。
## v1.1.0 新增核心函数
### `SliderController.solveSlider(page, sliderSelector, captchaSelector)`