update at 2025-10-25 23:39:25
This commit is contained in:
103
README.md
103
README.md
@@ -1,13 +1,18 @@
|
||||
# douban-crawler
|
||||
|
||||
> Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。滑块验证码需人工处理,本项目不再尝试自动识别。
|
||||
**版本**: v1.1.0
|
||||
|
||||
## 功能概览
|
||||
> Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。**已集成 AI 驱动的滑块验证码自动识别和求解功能**。
|
||||
|
||||
- 启动 Chromium 浏览器并访问豆瓣登录页;
|
||||
- 自动填写手机号,触发短信验证码;
|
||||
- 控制台提示用户完成页面内的额外验证(如滑块)并输入短信验证码;
|
||||
- 登录成功后将 Cookie 状态保存到 `~/douban-cookie.json`,后续运行可直接复用。
|
||||
## ✨ 核心功能
|
||||
|
||||
- 🔐 **自动登录**: 支持短信验证码登录流程
|
||||
- 🧩 **智能滑块识别**: 基于图像处理算法自动识别和求解滑块验证码
|
||||
- 🎯 **高成功率**: 采用多策略检测算法(暗区检测、边缘检测、颜色量化、LAB色彩空间分析)
|
||||
- 🔄 **自动重试**: 验证失败时自动刷新并重试,最多 10 次
|
||||
- 📊 **详细日志**: 完整的调试信息和截图保存,便于问题追溯
|
||||
- 🖼️ **可视化调试**: 自动标注检测到的滑块位置,保存带红框标记的图片
|
||||
- 🍪 **Cookie 持久化**: 自动保存登录态,下次可直接复用
|
||||
|
||||
## 环境准备
|
||||
|
||||
@@ -26,13 +31,19 @@ npx playwright install chromium
|
||||
DOUBAN_PHONE=13800000000 npm run login
|
||||
```
|
||||
|
||||
2. 浏览器会自动打开豆瓣登录页,脚本完成以下操作:
|
||||
2. 启用自动滑块验证(可选):
|
||||
|
||||
```bash
|
||||
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800000000 npm run login
|
||||
```
|
||||
|
||||
3. 浏览器会自动打开豆瓣登录页,脚本完成以下操作:
|
||||
- 填入手机号并点击「获取验证码」;
|
||||
- 控制台提示等待页面验证(若出现滑块,请手动完成);
|
||||
- 如果启用了自动滑块验证,会自动检测并滑动;否则等待用户手动完成;
|
||||
- 控制台等待用户输入短信验证码;
|
||||
- 验证码提交成功后,脚本将登录态写入 `~/douban-cookie.json` 并退出。
|
||||
|
||||
3. 下次运行会优先尝试加载该 Cookie 文件,若仍在有效期内可直接登录。
|
||||
4. 下次运行会优先尝试加载该 Cookie 文件,若仍在有效期内可直接登录。
|
||||
|
||||
## 命令列表
|
||||
|
||||
@@ -42,11 +53,12 @@ npx playwright install chromium
|
||||
|
||||
## 可配置项
|
||||
|
||||
当前脚本仅使用一个环境变量:
|
||||
当前脚本支持以下环境变量:
|
||||
|
||||
| 变量名 | 说明 | 是否必填 | 默认值 |
|
||||
| -------------- | ---------------- | -------- | ------ |
|
||||
| `DOUBAN_PHONE` | 登录手机号(大陆) | 必填 | - |
|
||||
| 变量名 | 说明 | 是否必填 | 默认值 |
|
||||
| --------------------- | ------------------------------ | -------- | ------ |
|
||||
| `DOUBAN_PHONE` | 登录手机号(大陆) | 必填 | - |
|
||||
| `DOUBAN_AUTO_SLIDER` | 是否启用自动滑块验证(1/true) | 可选 | false |
|
||||
|
||||
若需要更改 Cookie 保存位置,可在 `src/login.ts` 中调整 `COOKIES_PATH` 定义。
|
||||
|
||||
@@ -61,30 +73,63 @@ npx playwright install chromium
|
||||
## 常见问题
|
||||
|
||||
- **登录后仍提示手机号未填写?** 确认 Playwright 浏览器窗口焦点在页面内,避免浏览器阻止自动填充。
|
||||
- **提示滑块验证但脚本无动作?** 脚本已停止自动滑块功能,请在浏览器中手动拖动滑块完成验证。
|
||||
- **Cookie 未生成?** 只有当脚本确认登录成功时才会写入 Cookie。若终端未看到 “登录成功,Cookies 已保存…” 的日志,请检查短信验证码是否正确。
|
||||
- **自动滑块验证失败?** 系统会提示手动完成,或者尝试不启用自动滑块功能。
|
||||
- **Cookie 未生成?** 只有当脚本确认登录成功时才会写入 Cookie。若终端未看到 "登录成功,Cookies 已保存…" 的日志,请检查短信验证码是否正确。
|
||||
|
||||
## 滑块验证模块
|
||||
|
||||
本项目包含了从 `captcha_cracker` 移植并优化的滑块检测功能,位于 `src/slider/` 目录。
|
||||
|
||||
详细说明请查看 [src/slider/README.md](./src/slider/README.md)
|
||||
|
||||
### 滑块验证工作流程
|
||||
|
||||
1. **自动检测**: 点击"获取验证码"后自动检测滑块验证码窗口
|
||||
2. **图像采集**: 截取验证码图片并放大到 800px 宽度以提高识别精度
|
||||
3. **多策略检测**:
|
||||
- 暗区检测:识别滑块缺口的阴影区域
|
||||
- 边缘检测:使用 Canny 算法识别轮廓
|
||||
- 颜色量化:分析色彩分布找出异常区域
|
||||
- LAB 色彩空间:在更符合人类视觉的空间中检测差异
|
||||
4. **双滑块识别**: 同时检测左侧滑块和右侧缺口,计算精确距离
|
||||
5. **距离计算**:
|
||||
- 双滑块模式:`距离 = (缺口X - 滑块X) / scaleX`
|
||||
- 单滑块模式:基于 DOM 位置和图像分析综合计算
|
||||
6. **拟人化滑动**: 模拟真实人类操作的加速-匀速-减速轨迹
|
||||
7. **结果验证**: 检测成功标识或窗口消失,失败则自动刷新重试(最多 10 次)
|
||||
8. **可视化输出**: 在 `output/` 或 `noflag/` 目录保存带红框标记的检测结果图片
|
||||
|
||||
### 滑块识别算法
|
||||
|
||||
核心算法移植自 `captcha_cracker` 项目,包括:
|
||||
|
||||
- **候选框搜索** (`detection/candidate-search.ts`): 四种策略并行搜索可疑区域
|
||||
- **边界框优化** (`detector.ts`): 使用 Canny 边缘检测精确定位
|
||||
- **自学习模板匹配** (`detector-self-learning.ts`): 动态学习滑块模板提高准确率
|
||||
- **几何与图像工具** (`utils/`): IoU 计算、形态学操作、Sobel 算子等
|
||||
|
||||
### 调试与问题排查
|
||||
|
||||
所有截图和检测结果保存在:
|
||||
- `output/`: 常规调试输出
|
||||
- `noflag/`: 完整尺寸(800px)的检测图片
|
||||
- 文件命名格式:`captcha-{timestamp}.png` 和 `captcha-{timestamp}-detected.png`
|
||||
|
||||
查看 `-detected.png` 文件可以确认:
|
||||
- 红框标记的位置是否准确识别了滑块缺口
|
||||
- 如有两个框,左边的应该是滑块,右边的是缺口
|
||||
|
||||
## 声明
|
||||
|
||||
该项目仅供学习与功能验证,请勿用于违反豆瓣平台服务条款的场景。开发者需自行承担使用风险。
|
||||
|
||||
```bash
|
||||
# 启用自动滑块验证
|
||||
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login
|
||||
|
||||
# 独立测试滑块功能
|
||||
npm run slider
|
||||
```
|
||||
|
||||
详细说明请查看 [SLIDER.md](./SLIDER.md)
|
||||
|
||||
## 开发脚本
|
||||
## 开发文档
|
||||
|
||||
- `src/login.ts`:主登录流程,负责 Cookie 复用、短信登录以及滑块自动化;
|
||||
- `src/slider.ts`:滑块验证自动化工具,支持图像识别和轨迹模拟;
|
||||
- `SLIDER.md`:滑块验证详细文档,包含原理、配置和故障排查;
|
||||
- `src/slider/`:滑块验证模块,包含检测、移动等完整功能;
|
||||
- `ARCHITECTURE.md`:整体架构与流程说明;
|
||||
- `IMPLEMENTATION.md`:关键实现细节记录;
|
||||
- `login.md`:原始业务需求与操作步骤;
|
||||
- `block.md`:滑块破解思路(Python 版)与 TypeScript 脚本参考;
|
||||
- `typescript-spec.md`:团队 TypeScript 编码规范与示例。
|
||||
|
||||
## 许可
|
||||
|
||||
Reference in New Issue
Block a user