update at 2025-10-26 10:24:17
This commit is contained in:
@@ -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)`
|
||||
|
||||
Reference in New Issue
Block a user