187 lines
5.7 KiB
Markdown
187 lines
5.7 KiB
Markdown
# 版本信息
|
||
|
||
## 当前版本:v1.2.0
|
||
|
||
发布日期:2025-10-26
|
||
|
||
## 主要特性
|
||
|
||
### 📨 macOS 短信自动读取(v1.2.0)
|
||
|
||
- ✅ 基于 `better-sqlite3` 读取 `~/Library/Messages/chat.db` 的最新验证码短信
|
||
- ✅ 智能忽略旧消息,仅对新到达的“豆瓣网”验证码进行解析
|
||
- ✅ 使用正则解析 `验证码:xxxx` 格式,支持 4-6 位验证码
|
||
- ✅ 自动回填验证码输入框,失败时即时回退到手动输入
|
||
- ⚠️ 仅支持 macOS,并需要为终端授予“完全磁盘访问权限”
|
||
|
||
### 🎯 AI 驱动的滑块验证码自动破解(v1.1.0)
|
||
|
||
- ✅ 多策略并行检测(暗区域、边缘、颜色量化、LAB 色彩空间)
|
||
- ✅ 双滑块精准识别(左侧滑块 + 右侧缺口)
|
||
- ✅ 简化的距离计算算法:`距离 = (缺口X - 滑块X) / scaleX`
|
||
- ✅ 拟人化滑动轨迹(Playwright steps 参数)
|
||
- ✅ 自动重试机制(最多 10 次)
|
||
- ✅ 可视化调试(红框标注输出到 `output/` 目录)
|
||
|
||
### 📊 性能指标
|
||
|
||
- **检测准确率**:~70-80%
|
||
- **验证成功率**:~50%(含重试)
|
||
- **平均尝试次数**:1-3 次
|
||
- **单次检测耗时**:~2-3 秒
|
||
|
||
### 🚀 快速开始
|
||
|
||
```bash
|
||
# 启用自动滑块验证
|
||
DOUBAN_AUTO_SLIDER=1 DOUBAN_PHONE=13800138000 npm run login
|
||
|
||
# 独立测试滑块功能
|
||
npm run slider
|
||
|
||
# 批量复核历史截图
|
||
npm run slider -- --pic-dir=noflag
|
||
```
|
||
|
||
## 核心创新
|
||
|
||
### "两只小鸟距离"原理
|
||
|
||
v1.1.0 最重要的突破是简化了距离计算算法:
|
||
|
||
```typescript
|
||
// v1.0.0: 需要人工完成滑块
|
||
// v1.1.0: 自动计算并拖动
|
||
|
||
// 双滑块模式(推荐)
|
||
const distance = (box2.x - box1.x) / scaleX;
|
||
|
||
// 单滑块模式(兜底)
|
||
const distance = box.x / scaleX;
|
||
```
|
||
|
||
**原理**:就像计算两只小鸟嘴尖的水平距离,直接用右侧缺口的 X 坐标减去左侧滑块的 X 坐标,再除以图像缩放比例,就得到了滑块需要移动的距离。
|
||
|
||
### 图像缩放优化
|
||
|
||
- 原始验证码:340x191 像素
|
||
- 检测图像:800x449 像素(scaleX ≈ 2.35)
|
||
- 提高小尺寸滑块的检测精度
|
||
|
||
### 多策略并行检测
|
||
|
||
并行运行四种算法,然后 IoU 去重:
|
||
|
||
1. **暗区域检测**:查找亮度 < 100 的暗色区域
|
||
2. **Canny 边缘检测**:查找边缘密集区域
|
||
3. **颜色量化**:K-means 聚类找独特色块
|
||
4. **LAB 色彩空间**:感知均匀的色彩空间检测
|
||
|
||
## 文件结构
|
||
|
||
```mermaid
|
||
graph TD
|
||
root[src/]
|
||
root --> slider_dir[slider/<br/>滑块验证模块]
|
||
slider_dir --> slider_detector[detector.ts<br/>主检测器]
|
||
slider_dir --> slider_self[detector-self-learning.ts<br/>模板匹配]
|
||
slider_dir --> slider_controller[slider-controller.ts<br/>Playwright 集成]
|
||
slider_dir --> slider_candidate[candidate-search.ts<br/>多策略检测]
|
||
slider_dir --> slider_geometry[geometry.ts<br/>IoU 计算]
|
||
slider_dir --> slider_image[image.ts<br/>Sobel 边缘]
|
||
root --> sms_dir[sms/<br/>macOS 短信读取模块]
|
||
sms_dir --> sms_code[douban-code.ts<br/>解析 chat.db]
|
||
root --> noflag[noflag/<br/>原始验证码截图]
|
||
root --> output_dir[output/<br/>标注结果]
|
||
```
|
||
|
||
## 依赖项
|
||
|
||
- **playwright**: ^1.41.1(浏览器自动化)
|
||
- **sharp**: ^0.33.3(图像处理)
|
||
- **better-sqlite3**: ^12.4.1(本地 SQLite 查询,读取短信)
|
||
- **typescript**: ^5.4.2
|
||
|
||
## 环境变量
|
||
|
||
```bash
|
||
DOUBAN_AUTO_SLIDER=1 # 启用自动滑块验证
|
||
DOUBAN_PHONE=手机号 # 登录手机号(必填)
|
||
```
|
||
|
||
自动短信读取不需要新增环境变量,保持终端前台即可。
|
||
|
||
## 已知限制
|
||
|
||
1. **图像识别准确率**:约 70-80%,复杂背景或低对比度图片识别率较低
|
||
2. **验证成功率**:约 50%,受反爬虫机制影响
|
||
3. **仅供学习**:请遵守网站服务条款,不要用于商业或恶意用途
|
||
4. **平台限制**:短信自动读取仅适用于 macOS,且需为终端授予完全磁盘访问权限
|
||
|
||
## 相关文档
|
||
|
||
- [README.md](./README.md) - 项目总览
|
||
- [QUICKSTART.md](./QUICKSTART.md) - 快速开始指南
|
||
- [CHANGELOG.md](./CHANGELOG.md) - 详细更新日志
|
||
- [ARCHITECTURE.md](./ARCHITECTURE.md) - 架构说明
|
||
- [IMPLEMENTATION.md](./IMPLEMENTATION.md) - 实现细节
|
||
- [src/slider/README.md](./src/slider/README.md) - 滑块模块文档
|
||
|
||
## 升级指南
|
||
|
||
### 从 v1.1.0 升级到 v1.2.0
|
||
|
||
**新增依赖**:
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
**系统配置**:
|
||
- macOS “隐私与安全性” → “完全磁盘访问权限”,添加并勾选运行脚本的终端;
|
||
- 修改后需重新启动终端或 VS Code。
|
||
|
||
**代码变更**:
|
||
- `src/login.ts` 自动调用 `waitForDoubanCode` 读取短信;
|
||
- 新增 `src/sms/` 模块负责解析 `chat.db`;
|
||
- 读取失败会保留手动输入流程,无需额外开关。
|
||
|
||
**回退策略**:
|
||
- 若不希望开启自动读取,可在提示出现时直接手动输入验证码,无需修改代码。
|
||
|
||
### 从 v1.0.0 升级到 v1.1.0
|
||
|
||
**新增依赖**:
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
**新增环境变量**(可选):
|
||
```bash
|
||
export DOUBAN_AUTO_SLIDER=1
|
||
```
|
||
|
||
**新增目录**:
|
||
- `noflag/`:原始验证码截图会自动保存到这里
|
||
- `output/`:标注结果会自动保存到这里
|
||
|
||
**无需更改的部分**:
|
||
- `DOUBAN_PHONE` 环境变量用法不变
|
||
- `~/douban-cookie.json` Cookie 文件路径不变
|
||
- `npm run login` 命令用法不变
|
||
|
||
**新增功能**:
|
||
- 设置 `DOUBAN_AUTO_SLIDER=1` 启用自动滑块验证
|
||
- 使用 `npm run slider` 独立测试滑块功能
|
||
- 使用 `npm run slider -- --pic-dir=noflag` 批量复核截图
|
||
|
||
## 下一步计划
|
||
|
||
- [ ] 支持更多验证码类型(点选、文字识别)
|
||
- [ ] 引入机器学习模型提高准确率
|
||
- [ ] 优化轨迹模拟,降低被识别风险
|
||
- [ ] 支持更多网站的滑块验证码
|
||
|
||
---
|
||
|
||
**v1.2.0** - AI 滑块 + macOS 短信自动读取,让登录更丝滑 🎉
|