Three-layer CAPTCHA handling for browser automation. Prevents most CAPTCHAs, solves the rest.
Layer 1: CloakBrowser (FREE — prevents CAPTCHAs)
├─ 57 C++ source-level patches on Chromium 146
├─ 0.9 reCAPTCHA v3 score (human-level)
├─ Passes Cloudflare Turnstile auto-resolve
└─ Cost: $0 per request
Layer 2: ClickSolver (FREE — clicks Turnstile)
├─ Finds Turnstile iframe, clicks checkbox
├─ No API key needed
└─ Cost: $0 per attempt
Layer 3: 2Captcha / CapSolver (FALLBACK — solves CAPTCHAs)
├─ 30+ CAPTCHA types supported
├─ reCAPTCHA v2/v3, Enterprise, hCaptcha, Turnstile,
│ FunCaptcha, GeeTest, KeyCaptcha, Amazon WAF,
│ DataDome, Akamai, Imperva, and more
└─ Cost: ~$3/1000 solves
| Type | 2Captcha | CapSolver |
|---|---|---|
| reCAPTCHA v2 | ✅ | ✅ |
| reCAPTCHA v3 | ✅ | ✅ |
| reCAPTCHA Enterprise | ✅ | ✅ |
| Cloudflare Turnstile | ✅ | ✅ |
| hCaptcha | ✅ | ✅ |
| FunCaptcha (Arkose Labs) | ✅ | ✅ |
| GeeTest (v3/v4) | ✅ | ✅ |
| KeyCaptcha | ✅ | ✅ |
| Amazon WAF | ✅ | ✅ |
| Friendly Captcha | ✅ | ✅ |
| DataDome | ✅ | ✅ |
| Kasada | — | ✅ |
| Akamai | — | ✅ |
| Imperva/Incapsula | — | ✅ |
| MTCaptcha | ✅ | ✅ |
| CyberSiARA | ✅ | ✅ |
| Lemin CAPTCHA | ✅ | — |
| Cutcaptcha | ✅ | — |
| Tencent CAPTCHA | ✅ | — |
| Yandex SmartCaptcha | ✅ | — |
| VK Captcha | ✅ | — |
| atbCAPTCHA | ✅ | — |
| CaptchaFox | ✅ | — |
| ALTCHA | ✅ (local PoW) | — |
| Prosopo Procaptcha | ✅ (click) | — |
| Temu CAPTCHA | ✅ | — |
| Binance | ✅ | ✅ |
| Capy CAPTCHA | ✅ | — |
| Hunt CAPTCHA | ✅ | ✅ |
| Image/Text CAPTCHA | ✅ | — |
pip install cloakbrowser requests
# Set API keys (get from https://2captcha.com and https://dashboard.capsolver.com)
export TWOCAPTCHA_API_KEY="your_key"
export CAPSOLVER_API_KEY="your_key"
# Or save to config files
echo "your_key" > ~/.config/2captcha/api_key
echo "your_key" > ~/.config/capsolver/api_keyAll-in-one: CloakBrowser + auto-detect + auto-solve.
from stealth_browse import StealthBrowser
sb = StealthBrowser(headless=True, humanize=True, auto_solve=True)
page = sb.navigate("https://protected-site.com")
# page is ready — CAPTCHAs handled automatically
title = sb.get_page().title()
sb.close()python3 scripts/stealth_browse.py --url "https://protected-site.com"
python3 scripts/stealth_browse.py --url "https://protected-site.com" --output html
python3 scripts/stealth_browse.py --url "https://protected-site.com" --output textFor when you already have a browser session and just need to solve a CAPTCHA:
# reCAPTCHA v2 via 2Captcha
python3 scripts/solve_recaptcha_v2.py --sitekey SITEKEY --pageurl URL
# reCAPTCHA via CapSolver
python3 scripts/solve_capsolver.py --sitekey SITEKEY --pageurl URL
# Image grid
python3 scripts/solve_recaptcha_grid.py --image screenshot.png --question "traffic lights"2Captcha Demo (https://2captcha.com/demo)
| Type | Result | Time |
|---|---|---|
| reCAPTCHA v2 | ✅ Solved | 5s |
| reCAPTCHA v2 Enterprise | ✅ Solved | 62s |
| reCAPTCHA v3 | ✅ Solved | 5s |
| Cloudflare Turnstile | ✅ Solved | 5s |
| MTCaptcha | ✅ Solved | 5s |
| Image CAPTCHA | ✅ Solved | 3s |
| Type | Result | Time |
|---|---|---|
| Image CAPTCHA | ✅ Solved | 20s |
| reCAPTCHA v2 | ✅ Solved | 37s |
| hCaptcha | ✅ Solved | 97s |
| Math CAPTCHA | ✅ Solved | 23s |
| Cloudflare Turnstile | ✅ Solved | 5s |
| Site | Result |
|---|---|
| Google Search | ✅ No CAPTCHA |
| Google Accounts | ✅ No CAPTCHA |
| MyFitnessPal | ✅ No CAPTCHA |
| LinkedIn Login | ✅ No CAPTCHA |
| Discord Login | ✅ No CAPTCHA |
| ElfHosted Store | ✅ No CAPTCHA |
| Turnstile Explicit | ✅ Auto-passed |
| Turnstile Invisible | ✅ Auto-passed |
Default: 2Captcha — accepts all sitekeys, most cost-effective.
| Priority | Service | When to Use |
|---|---|---|
| 1 | ClickSolver | Turnstile only (free) |
| 2 | 2Captcha | Default for all types |
| 3 | CapSolver | Fallback / Cloudflare-heavy workloads |
- Python 3.10+
- CloakBrowser (auto-downloads Chromium binary on first run)
- 2Captcha API key (recommended) and/or CapSolver API key
MIT
