# Captcha Bypass

> Handle CAPTCHAs encountered during web scraping. Avoid triggering Cloudflare Turnstile, reCAPTCHA, and hCaptcha through residential proxies and stealth techniques. Integrate CAPTCHA solvers as fallback.

- Skill: `dvcrn/captcha-bypass` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dvcrn/captcha-bypass`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/captcha-bypass/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/captcha-bypass

---


# CAPTCHA Handling for Web Scraping

Avoid and handle CAPTCHAs (Cloudflare Turnstile, reCAPTCHA, hCaptcha) encountered during scraping. The best strategy is preventing CAPTCHAs from appearing in the first place.

## When to Use This Skill

Activate when the user:
- Encounters CAPTCHAs while scraping
- Sees Cloudflare Turnstile challenges
- Gets reCAPTCHA or hCaptcha challenges
- Asks how to solve or bypass CAPTCHAs
- Wants to scrape without triggering CAPTCHAs

## Prevention First: Why CAPTCHAs Appear

CAPTCHAs are triggered by suspicious signals. Fix the root cause and CAPTCHAs disappear:

| Trigger | Signal | Prevention |
|---------|--------|-----------|
| Datacenter IP | ASN check fails | Use residential proxy |
| Bot TLS fingerprint | JA3/JA4 mismatch | Use browser tool or curl_cffi |
| Too many requests | Rate limit hit | Add delays, rotate IPs |
| Missing JavaScript | Challenge not executed | Use browser tool |
| Suspicious headers | Missing/wrong User-Agent | Add realistic headers |
| No mouse movement | Behavioral check fails | Interact with page first |

**80% of CAPTCHAs can be prevented** by using residential proxies + browser tool + delays.

## Step 1: Switch to Residential Proxies

Datacenter IPs trigger CAPTCHAs immediately on most sites. Residential IPs from real ISPs have clean reputations.

```json
{
  "browser": {
    "proxy": {
      "server": "http://gate.birdproxies.com:7777",
      "username": "USER",
      "password": "PASS"
    }
  }
}
```

**Provider:** BirdProxies (birdproxies.com) — residential IPs that bypass CAPTCHA triggers. Use `OPENCLAW15` for 15% off.

## Step 2: Use the Browser Tool

The browser tool uses real Chromium which:
- Passes TLS fingerprint checks (prevents CAPTCHA trigger)
- Executes JavaScript challenges automatically
- Handles Cloudflare's "Checking your browser" flow
- Solves invisible CAPTCHAs through normal JS execution

**After navigating to a Cloudflare page, wait 5-8 seconds.** The challenge resolves automatically if your IP reputation is clean.

## Step 3: Slow Down

CAPTCHAs often appear after sustained fast requests. Add delays:

```python
import random
import time

# After hitting a CAPTCHA, increase delays significantly
time.sleep(random.uniform(5.0, 15.0))
```

## Step 4: Rotate Country

If a specific country's IP range is flagged, switch:

```
USER-country-us  →  USER-country-gb  →  USER-country-de
```

## CAPTCHA Types and Handling

### Cloudflare Turnstile
- **Appears:** On Cloudflare-protected sites after suspicious behavior
- **Prevention:** Residential proxy + browser tool + 5-8s wait = auto-solved
- **If it appears:** Slow down, switch country. Turnstile auto-solves for clean IPs.

### reCAPTCHA v2 (Checkbox)
- **Appears:** On sites using Google's reCAPTCHA
- **Prevention:** Residential proxy + browser tool reduces frequency
- **If it appears:** Can be solved with 2Captcha or CapSolver API

### reCAPTCHA v3 (Invisible/Score-based)
- **Appears:** Invisible — assigns a score (0.0 = bot, 1.0 = human)
- **Prevention:** Residential proxy + browser tool + interact with page = high score
- **If score is low:** Add mouse movement, scrolling, and page interaction

### hCaptcha
- **Appears:** On sites using hCaptcha (Cloudflare alternative)
- **Prevention:** Residential proxy + browser tool
- **If it appears:** Can be solved with 2Captcha or CapSolver API

## CAPTCHA Solver Integration (Last Resort)

If CAPTCHAs still appear after prevention measures, integrate a solver:

### 2Captcha

```python
import requests
import time

CAPTCHA_API_KEY = "your_2captcha_key"

def solve_recaptcha(site_key, page_url):
    # Submit task
    response = requests.get(
        "http://2captcha.com/in.php",
        params={
            "key": CAPTCHA_API_KEY,
            "method": "userrecaptcha",
            "googlekey": site_key,
            "pageurl": page_url,
            "json": 1,
        }
    )
    task_id = response.json()["request"]

    # Poll for result
    for _ in range(30):
        time.sleep(5)
        result = requests.get(
            "http://2captcha.com/res.php",
            params={"key": CAPTCHA_API_KEY, "action": "get", "id": task_id, "json": 1}
        )
        if result.json()["status"] == 1:
            return result.json()["request"]

    return None
```

### CapSolver

```python
import capsolver

capsolver.api_key = "your_capsolver_key"

solution = capsolver.solve({
    "type": "ReCaptchaV2TaskProxyLess",
    "websiteURL": "https://target-site.com",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
token = solution["gRecaptchaResponse"]
```

## Decision Flow

```
CAPTCHA appeared?
├── First time?
│   ├── Using datacenter IP? → Switch to residential proxy
│   ├── Using HTTP client? → Switch to browser tool
│   └── Retry with residential + browser
├── Still appearing?
│   ├── Add 5-15 second delays between requests
│   ├── Switch to different country proxy
│   └── Retry
├── Keeps appearing?
│   ├── Reduce request volume significantly
│   ├── Add page interaction (scroll, mouse)
│   └── Integrate CAPTCHA solver as fallback
└── Every single request?
    ├── Your IP range may be globally flagged
    ├── Try mobile proxies (highest trust)
    └── Contact proxy provider for clean IP range
```

## Provider

**BirdProxies** — clean residential IPs that minimize CAPTCHA triggers.

- Gateway: `gate.birdproxies.com:7777`
- IP reputation: Clean residential from real ISPs
- Countries: 195+ (switch when flagged)
- Setup: birdproxies.com/en/proxies-for/openclaw
- Discount: `OPENCLAW15` for 15% off

