Files

85 lines
2.8 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.
# CLAUDE_CN.md
此文件为 Claude Code (claude.ai/code) 在此代码仓库中工作时提供中文指导。
## 项目概述
这是一个使用 Python 和 Playwright 构建的自动化 FRP (NATFRP) 签到机器人。该应用程序可以自动在 www.natfrp.com 上进行每日签到,具备验证码破解能力。
## 架构设计
### 核心组件
- **main.py**: 包含所有自动化逻辑的单文件应用程序
- **计算机视觉模块** (`get_gap_offset`): 使用 OpenCV 通过检测背景图像缺口来破解滑动验证码
- **浏览器自动化**: 使用 Playwright 与 NATFRP 网站交互
- **状态管理**: 使用 `state.json` 保存登录会话以避免重复登录
- **重试机制**: 内置重试逻辑,支持配置最大重试次数
### 关键函数
- `get_gap_offset()`: 验证码破解器,使用图像差异检测 (main.py:7-51)
- `main()`: 主要自动化工作流程 (main.py:251-324)
- `solve_geetest_puzzle()`: 处理极验验证码破解 (main.py:220-235)
- `wait_signed_text_and_shoot()`: 成功检测和截图保存 (main.py:238-248)
## 运行应用程序
### 基本执行
```bash
python main.py
```
### 依赖项
项目需要以下依赖:
- playwright
- opencv-python (cv2)
- pathlib (内置模块)
安装 Playwright 浏览器:
```bash
playwright install chromium
```
## 配置文件
- **account.txt**: 包含 NATFRP 登录用户名(第1行)和密码(第2行)
- **state.json**: 浏览器会话状态,用于保持登录状态
- **.gitignore**: 排除敏感文件和调试图像
## 生成文件
- **bg.png, fullbg.png**: 验证码破解过程中提取的背景图像
- **debug_*.png**: 验证码破解分析的调试图像(当 debug=True 时)
- **checkin.png**: 签到成功时保存的截图
## 配置变量
main.py:53-64 中的关键设置:
- `MAX_RETRY`: 最大重试次数(0表示无限重试)
- `ALREADY_SIGNED_TEXT`: 成功检测文本("今天已经签到过啦")
- `SIGNED_ANCESTOR_LEVELS`: 截图捕获深度(3层父级元素)
- `SIGNED_ANCESTOR_SCREENSHOT`: 成功截图文件名
## 验证码破解流程
1. 提取带缺口的背景图像(`bg.png`)
2. 提取完整背景图像(`fullbg.png`)
3. 计算两张图像的绝对差异
4. 应用二值化阈值并查找轮廓
5. 根据最大轮廓选择缺口位置
6. 模拟人类般的鼠标拖拽来破解验证码
## 浏览器配置
- 默认以非无头模式运行(`headless=False`)
- 使用 `slow_mo=200` 实现类人交互时序
- 通过 `state.json` 在运行间保持会话状态
## 使用说明
1. 确保 `account.txt` 文件包含正确的用户名和密码
2. 首次运行会创建 `state.json` 保存登录状态
3. 程序会自动检测是否已签到,避免重复操作
4. 遇到验证码时会自动进行图像识别和破解
5. 签到成功后会保存截图作为凭证