art3m4ik3/cloudflare-solver
GitHub: art3m4ik3/cloudflare-solver
异步 Python 工具,用于绕过 Cloudflare Challenge 和 Turnstile 验证,获取 cf_clearance cookie 或验证 token。
Stars: 18 | Forks: 2
# Cloudflare Challenge Solver
异步 Python 解决方案,用于绕过 Cloudflare 的反机器人挑战,支持 **Challenge**(基于 cookie)和 **Turnstile**(基于 token)两种类型。
## 功能特性
- **双重挑战支持** - 支持 Challenge(`cf_clearance` cookie)和 Turnstile(token)两种类型
- **异步** - 基于 `asyncio` 和 `Playwright` 构建,具有高性能
- **隐蔽性** - 使用 Camoufox 和 BrowserForge 实现逼真的浏览器指纹
- **模块化** - 采用面向对象设计,使用 dataclasses 处理结果
- **可配置** - 支持自定义重试、延迟、OS 指纹等
- **日志** - 内置调试日志,便于故障排查
- **安全性** - 支持代理和拟人化
## 安装说明
1. 安装依赖包:
```
pip install -r requirements.txt
```
2. 安装 Playwright 浏览器:
```
playwright install
```
## 使用方法
### 基础示例 - Challenge 类型(Cookie)
```
from main import CloudflareSolver, ChallengeType
import asyncio
async def main():
solver = CloudflareSolver(
challenge_type=ChallengeType.CHALLENGE,
headless=True,
os=["windows"],
)
result = await solver.solve("https://nopecha.com/demo/cloudflare")
if result:
print(f"Cookie obtained: {result.name}={result.value}")
else:
print("Failed to solve Cloudflare challenge")
asyncio.run(main())
```
### 基础示例 - Turnstile 类型(Token)
```
from main import CloudflareSolver, ChallengeType
import asyncio
async def main():
solver = CloudflareSolver(
challenge_type=ChallengeType.TURNSTILE,
headless=True,
os=["windows"],
)
result = await solver.solve("https://nopecha.com/captcha/turnstile")
if result:
print(f"Token obtained: {result.token}")
else:
print("Failed to solve Turnstile challenge")
asyncio.run(main())
```
### 代理使用
```
from main import CloudflareSolver, ChallengeType
import asyncio
async def main():
# "http://user:pass@host:port" || "http://host:port"
proxy_url = "http://user:password@123.45.67.89:8080"
solver = CloudflareSolver(
challenge_type=ChallengeType.CHALLENGE,
proxy=proxy_url,
headless=True
)
result = await solver.solve("https://nopecha.com/demo/cloudflare")
if result:
print(f"Success! Cookie: {result.value[:20]}...")
asyncio.run(main())
```
### 高级配置
```
solver = CloudflareSolver(
challenge_type=ChallengeType.TURNSTILE, # or ChallengeType.CHALLENGE
sleep_time=5, # Longer delay before clicking challenge
headless=False, # Show browser window
os=["macos"], # macOS fingerprint
debug=True, # Enable verbose logging
retries=50, # More attempts to find challenge
proxy="http://user:pass@host:port" # Use a proxy server
)
```
## API 参考
### `ChallengeType` 枚举
定义要解决的 Cloudflare 挑战类型:
- `CHALLENGE` - 传统挑战,返回 `cf_clearance` cookie
- `TURNSTILE` - Turnstile 挑战,从隐藏输入字段返回 token
### `CloudflareCookie` 数据类
表示 Cloudflare clearance cookie(用于 Challenge 类型):
- `name`: Cookie 名称(通常为 "cf_clearance")
- `value`: Cookie 值
- `domain`: Cookie 域名
- `path`: Cookie 路径
- `expires`: 过期时间戳
- `http_only`: HTTP Only 标志
- `secure`: Secure 标志
- `same_site`: SameSite 策略
### `TurnstileToken` 数据类
表示 Turnstile token(用于 Turnstile 类型):
- `token`: 从 `cf-turnstile-response` 输入字段提取的 token 值
### `CloudflareSolver` 类
#### 参数:
- `challenge_type`: 要解决的挑战类型 - `ChallengeType.CHALLENGE` 或 `ChallengeType.TURNSTILE`(默认值:`ChallengeType.CHALLENGE`)
- `sleep_time`: 点击挑战前的延迟(默认值:3)
- `headless`: 以无头模式运行浏览器(默认值:True)
- `os`: OS 指纹(默认值:["windows"])
- `debug`: 启用调试日志(默认值:False)
- `retries`: 查找挑战的尝试次数(默认值:30)
- `proxy`: 代理服务器 URL(例如:"http://user:pass@host:port")(默认值:None)
#### 方法:
- `solve(link: str)`: 解决给定 URL 的 Cloudflare 挑战,返回 `CloudflareCookie`、`TurnstileToken` 或 `None`
## 工作原理
### Challenge 类型(Cookie)
1. 启动一个具有逼真指纹的隐蔽浏览器实例
2. 导航到受保护的 URL
3. 检测 Cloudflare challenge iframe
4. 自动点击验证复选框
5. 成功后提取 `cf_clearance` cookie
6. 将 cookie 作为经过验证的 dataclass 对象返回
### Turnstile 类型(Token)
1. 启动一个具有逼真指纹的隐蔽浏览器实例
2. 导航到受保护的 URL
3. 检测 Cloudflare challenge iframe
4. 自动点击验证复选框
5. 从 `cf-turnstile-response` 隐藏输入字段中提取 token
6. 将 token 作为经过验证的 dataclass 对象返回
## 重要说明
标签:BeEF, Camoufox, cf_clearance, Cloudflare, Cookie获取, IP 地址批量处理, MITRE ATT&CK, Playwright, Python, Selenium替代, Turnstile, Web安全, Web抓取, 人机验证, 代理支持, 反机器人, 告警, 域名收集, 异步, 无后门, 浏览器指纹, 爬虫, 特征检测, 绕过防护, 网络安全, 蓝队分析, 计算机取证, 逆向工具, 隐私保护, 验证码绕过