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抓取, 人机验证, 代理支持, 反机器人, 告警, 域名收集, 异步, 无后门, 浏览器指纹, 爬虫, 特征检测, 绕过防护, 网络安全, 蓝队分析, 计算机取证, 逆向工具, 隐私保护, 验证码绕过