Files
douban-login/release.md
2025-10-26 10:24:17 +08:00

233 lines
9.0 KiB
Markdown
Raw Permalink 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.

## v1.0.0
Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。
滑块验证码需人工处理,本项目不再尝试自动识别。
### 功能概览
- 启动 Chromium 浏览器并访问豆瓣登录页;
- 自动填写手机号,触发短信验证码;
- 控制台提示用户完成页面内的额外验证(如滑块)并输入短信验证码;
- 登录成功后将 Cookie 状态保存到 `~/douban-cookie.json`,后续运行可直接复用。
### 环境准备
```bash
npm install
npx playwright install chromium
```
需要 Node.js ≥ 18。Playwright 会自动下载 Chromium首次运行请确保网络可访问 Playwright CDN。
### 使用方式
1. 设置手机号环境变量并运行登录脚本:
```bash
DOUBAN_PHONE=13800000000 npm run login
```
2. 浏览器会自动打开豆瓣登录页,脚本完成以下操作:
- 填入手机号并点击「获取验证码」;
- 控制台提示等待页面验证(若出现滑块,请手动完成);
- 控制台等待用户输入短信验证码;
- 验证码提交成功后,脚本将登录态写入 `~/douban-cookie.json` 并退出。
3. 下次运行会优先尝试加载该 Cookie 文件,若仍在有效期内可直接登录。
### 命令列表
| 命令 | 说明 |
| --------------- | ---------------------------- |
| `npm run login` | 启动豆瓣登录流程并保存 Cookie |
### 可配置项
当前脚本仅使用一个环境变量:
| 变量名 | 说明 | 是否必填 | 默认值 |
| -------------- | ---------------- | -------- | ------ |
| `DOUBAN_PHONE` | 登录手机号(大陆) | 必填 | - |
若需要更改 Cookie 保存位置,可在 `src/login.ts` 中调整 `COOKIES_PATH` 定义。
### 工作流程说明
1. 读取 `DOUBAN_PHONE`,未提供则直接退出;
2. 若存在 `~/douban-cookie.json`,加载后访问登录页并校验登录态;
3. 如未登录,执行短信验证码流程,期间需手动处理页面可能出现的滑块或图形验证码;
4. 用户在终端输入收到的短信验证码;
5. 验证通过后,将当前浏览器上下文的 `storageState` 写入 `~/douban-cookie.json`。
### 常见问题
- **登录后仍提示手机号未填写?** 确认 Playwright 浏览器窗口焦点在页面内,避免浏览器阻止自动填充。
- **提示滑块验证但脚本无动作?** 脚本已停止自动滑块功能,请在浏览器中手动拖动滑块完成验证。
- **Cookie 未生成?** 只有当脚本确认登录成功时才会写入 Cookie。若终端未看到 “登录成功Cookies 已保存…” 的日志,请检查短信验证码是否正确。
```bash
# 启用自动滑块验证
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login
# 独立测试滑块功能
npm run slider
```
### 开发脚本
- `src/login.ts`:主登录流程,负责 Cookie 复用、短信登录以及滑块自动化;
- `login.md`:原始业务需求与操作步骤;
- `block.md`滑块破解思路Python 版)与 TypeScript 脚本参考;
- `typescript-spec.md`:团队 TypeScript 编码规范与示例。
### 许可
本项目仅用于功能验证和学习,使用时请遵守目标网站的服务条款。
## v1.1.0
### 🎉 主要更新
**AI 驱动的滑块验证码自动破解**
本版本最大亮点是集成了完整的滑块验证码自动识别和求解系统,从 `captcha_cracker` 项目移植并优化了核心算法。
#### ✨ 新增功能
1. **智能滑块识别** 🔍
- 多策略并行检测暗区域、Canny 边缘、颜色量化、LAB 色彩空间
- 双滑块精准识别:同时检测左侧滑块和右侧缺口
- 图像缩放优化:自动放大到 800px 以提高检测精度(原始 340px
- 可视化调试:自动生成带红框标注的检测结果图
2. **简化距离计算算法** 📐
- **v1.1.0 核心改进**:采用简洁准确的几何原理
- 双滑块模式:`距离 = (缺口X - 滑块X) / scaleX`
- 类比"两只小鸟嘴尖距离",直接计算左边界水平距离
- 移除复杂的坐标转换逻辑,提升准确性
3. **拟人化滑动轨迹** 🎯
- 使用 Playwright 的 `steps` 参数实现平滑移动
- 避免机械化操作特征
- 成功率约 50%10 次重试机制)
4. **自动重试机制** 🔄
- 验证失败自动刷新验证码
- 最多尝试 10 次(可配置)
- 实时日志输出,便于调试
5. **截图输出规范** 📸
- 原始验证码:保存到 `noflag/` 目录
- 标注结果:保存到 `output/` 目录
- 支持 CLI 工具批量复核:`npm run slider -- --pic-dir=noflag`
#### 🔧 技术细节
**核心模块结构**`src/slider/`
- `detector.ts`: 主检测器,实现多策略候选搜索和评分
- `detector-self-learning.ts`: 模板匹配,用于第二滑块检测
- `slider-controller.ts`: Playwright 集成,控制浏览器滑动
- `candidate-search.ts`: 四种并行检测算法实现
- `utils/geometry.ts`: IoU 计算等几何工具
- `utils/image.ts`: Sobel 边缘检测、形态学操作
- `cli.ts`: 批量评估和标注工具
- `validator.ts`: 检测结果验证工具
**依赖变更**
- 新增 `sharp@^0.33.3`:图像处理(缩放、边缘检测、颜色量化)
- 已有 `playwright@^1.41.1`:浏览器自动化
**环境变量**
```bash
DOUBAN_AUTO_SLIDER=1 # 启用自动滑块验证
DOUBAN_PHONE=手机号 # 登录手机号
```
#### 📊 性能指标
- **检测准确率**~70-80%(基于标注数据集验证)
- **验证成功率**~50%(考虑网站反爬虫机制)
- **平均尝试次数**1-3 次
- **单次检测耗时**~2-3 秒(含截图、检测、滑动)
#### 🐛 已修复问题
1. **坐标系不统一**:修复了截图坐标与页面坐标的转换错误
2. **iframe 元素访问**:正确处理腾讯验证码 iframe 内的元素定位
3. **边距过滤过严**调整候选框边缘判断逻辑5% → 1%
4. **距离计算复杂**:简化为基本几何公式,提高准确性
#### 📖 文档更新
- `README.md`: 添加自动滑块验证功能说明
- `src/slider/README.md`: 详细的算法实现和调试指南
- `CHANGELOG.md`: 新增版本变更日志
- `QUICKSTART.md`: 更新快速开始指南
#### 🎯 使用示例
**最简单的使用方式**
```bash
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login
```
**独立测试滑块功能**
```bash
npm run slider
```
**编程接口**
```typescript
import { SliderController } from './slider';
const controller = new SliderController(10);
const result = await controller.solveSlider(page, '.slider-button', '#captcha');
if (result.success) {
console.log(`成功!尝试 ${result.attempts} 次`);
}
```
#### ⚠️ 注意事项
1. **图像识别局限性**:复杂背景或低对比度图片可能识别失败
2. **反爬虫检测**:频繁使用可能触发更严格的验证机制
3. **仅供学习**:请遵守网站服务条款,不要用于商业或恶意用途
#### 🚀 下一步计划
- [ ] 支持更多验证码类型(点选、文字识别)
- [ ] 优化检测算法,提高复杂场景的准确率
- [ ] 添加机器学习模型,替代规则式检测
- [ ] 支持更多网站的滑块验证码
- [x] 自动提取 macOS 收到的短信验证码v1.2.0 已上线)
- [ ] 拓展短信自动读取到第三方短信服务或非 macOS 平台
## v1.2.0
新增: **macOS 短信自动读取** **自动回填验证码** **智能降级策略** **日志可观测性**
### 🚀 亮点
1. **macOS 短信自动读取**:新增 `src/sms/douban-code.ts` 模块,基于 `better-sqlite3` 读取 `~/Library/Messages/chat.db`,自动捕获最新“豆瓣网”验证码短信。
2. **自动回填验证码**:登录流程会在成功获取验证码后自动填充 `#code` 输入框,提升一次性登录体验。
3. **智能降级策略**:若未授予完全磁盘访问权限或数据库被占用,脚本会输出原因并回退到命令行输入,保证流程不中断。
4. **日志可观测性**:短信阶段新增 `[短信读取]` 日志前缀,帮助定位权限、解析或读取失败的问题。
### 🔧 兼容性要求
- 仅支持 macOS需为运行脚本的终端Terminal/iTerm2/VS Code授予“完全磁盘访问权限”并重启终端。
- 新增依赖 `better-sqlite3@^12.4.1`(同步 API零依赖运行以及类型声明 `@types/better-sqlite3`。
- 保留手动输入验证码流程Windows/Linux 用户或未授权情况下仍可照常使用。
### 📦 目录与配置变更
- 新增 `src/sms/` 目录存放短信读取模块。
- `src/login.ts` 在滑块验证后自动调用短信读取逻辑,并等待验证码输入框可见。
- `README`, `VERSION`, `ARCHITECTURE`, `IMPLEMENTATION`, `QUICKSTART`, `CHANGELOG` 等文档同步至 v1.2.0,增加权限配置说明。
### ✅ 升级指南
```bash
npm install
```
1. 授权完全磁盘访问:系统设置 → 隐私与安全性 → 完全磁盘访问权限 → 添加终端并勾选;
2. 重启终端或 VS Code
3. 运行 `npm run login` 体验自动读取验证码。