SakuraFrp 自动签到(main + sakura_frp_auto_check + SakuraFrpQiandao),已排除 .env 与日志
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is an automated FRP (NATFRP) check-in bot built with Python and Playwright. The application automates daily sign-in on www.natfrp.com with CAPTCHA solving capabilities.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
- **main.py**: Single-file application containing the entire automation logic
|
||||
- **Computer Vision Module** (`get_gap_offset`): Uses OpenCV to solve sliding CAPTCHA puzzles by detecting gaps in background images
|
||||
- **Browser Automation**: Uses Playwright to interact with the NATFRP website
|
||||
- **State Management**: Preserves login sessions using `state.json` to avoid repeated logins
|
||||
- **Retry Logic**: Built-in retry mechanism with configurable maximum attempts
|
||||
|
||||
### Key Functions
|
||||
|
||||
- `get_gap_offset()`: CAPTCHA solver using image difference detection in main.py:7-51
|
||||
- `main()`: Main automation workflow in main.py:251-324
|
||||
- `solve_geetest_puzzle()`: Handles GeeTest CAPTCHA solving in main.py:220-235
|
||||
- `wait_signed_text_and_shoot()`: Success detection and screenshot capture in main.py:238-248
|
||||
|
||||
## Running the Application
|
||||
|
||||
### Basic Execution
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
### Dependencies
|
||||
The project requires:
|
||||
- playwright
|
||||
- opencv-python (cv2)
|
||||
- pathlib (built-in)
|
||||
|
||||
Install Playwright browsers after installing the package:
|
||||
```bash
|
||||
playwright install chromium
|
||||
```
|
||||
|
||||
## Configuration Files
|
||||
|
||||
- **account.txt**: Contains username (line 1) and password (line 2) for NATFRP login
|
||||
- **state.json**: Browser session state for maintaining login sessions
|
||||
- **.gitignore**: Excludes sensitive files and debug images
|
||||
|
||||
## Generated Files
|
||||
|
||||
- **bg.png, fullbg.png**: CAPTCHA background images extracted during solving
|
||||
- **debug_*.png**: Debug images for CAPTCHA solving analysis (when debug=True)
|
||||
- **checkin.png**: Screenshot saved upon successful sign-in
|
||||
|
||||
## Configuration Variables
|
||||
|
||||
Key settings in main.py:53-64:
|
||||
- `MAX_RETRY`: Maximum retry attempts (0 for infinite)
|
||||
- `ALREADY_SIGNED_TEXT`: Success detection text ("今天已经签到过啦")
|
||||
- `SIGNED_ANCESTOR_LEVELS`: Screenshot capture depth (3 parent levels)
|
||||
- `SIGNED_ANCESTOR_SCREENSHOT`: Success screenshot filename
|
||||
|
||||
## CAPTCHA Solving Process
|
||||
|
||||
1. Extract background image with gap (`bg.png`)
|
||||
2. Extract complete background image (`fullbg.png`)
|
||||
3. Calculate absolute difference between images
|
||||
4. Apply binary threshold and find contours
|
||||
5. Select gap location based on largest contours
|
||||
6. Simulate human-like mouse dragging to solve
|
||||
|
||||
## Browser Configuration
|
||||
|
||||
- Runs in non-headless mode by default (`headless=False`)
|
||||
- Uses `slow_mo=200` for human-like interaction timing
|
||||
- Maintains session state between runs via `state.json`
|
||||
Reference in New Issue
Block a user