SakuraFrp 自动签到(main + sakura_frp_auto_check + SakuraFrpQiandao),已排除 .env 与日志

This commit is contained in:
RRRosmontis
2026-08-27 21:43:38 +08:00
commit 2a9f96fb18
21 changed files with 2209 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
# 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. 签到成功后会保存截图作为凭证