Web Scraping / CAPTCHA Solving
How to Solve CAPTCHAs When Web Scraping
Your scraper is running smoothly until a CAPTCHA appears - suddenly every request returns a challenge page instead of the data you need. CAPTCHAs are one of the most common obstacles in web scraping, and traditionally one of the most frustrating to handle. Here is how to deal with them automatically.
Why CAPTCHAs are hard to handle
Multiple CAPTCHA types
There is no single CAPTCHA standard. Google uses reCAPTCHA (v2 checkbox, v2 invisible, v3 scoring), Cloudflare uses Turnstile, and many sites use hCaptcha. Each type has different solving requirements, and a site can switch between providers at any time.
Traditional solving is slow and complex
The usual approach is to integrate a third-party CAPTCHA solving service - send the challenge to an API, poll for the solution, inject the token back into the page, and submit the form. This adds seconds to every request, requires managing API keys for yet another service, and introduces a new point of failure in your pipeline.
CAPTCHAs appear unpredictably
A site might serve a CAPTCHA on the first request, or only after your 50th. It might show one to certain IP ranges but not others. Your scraper needs to detect when a CAPTCHA appears, solve it, and then re-request the original page - all without losing its place in the workflow.
One parameter handles it all
With Browser7, CAPTCHA solving is a single parameter: captcha="auto". When enabled, Browser7 detects any CAPTCHA on the page, solves it automatically, and returns the actual page content - not the challenge page. You do not need to integrate a separate solving service or write detection logic.
from browser7 import Browser7
client = Browser7(api_key="b7_your_api_key")
result = client.render(
"https://www.google.com/search?q=refurbished+phones",
captcha="auto",
country_code="US",
)
print(result.html)
print("CAPTCHA encountered:", result.captcha)The response includes a captcha field that tells you whether a CAPTCHA was encountered and solved during the render. If no CAPTCHA appeared, the field is null. If one was solved, it contains details about the type and resolution.
Supported CAPTCHA types
Browser7 handles the most common CAPTCHA systems used by websites today:
reCAPTCHA v2
The "I'm not a robot" checkbox and image selection challenges used across Google properties and millions of other websites.
reCAPTCHA v3
The invisible scoring system that runs in the background and assigns a trust score based on user behavior patterns.
Cloudflare Turnstile
Cloudflare's CAPTCHA replacement that runs browser-level challenges without requiring user interaction.
hCaptcha
Image classification challenges used by Discord, Cloudflare (as a fallback), and many other sites as a reCAPTCHA alternative.
When to enable CAPTCHA solving
Not every site serves CAPTCHAs. Many sites work perfectly with a standard Browser7 render - the residential proxy and real browser fingerprint are enough to avoid challenges entirely. You only need captcha="auto" when a site consistently presents CAPTCHAs regardless of IP or fingerprint.
Common sites that serve CAPTCHAs to automated traffic include Google Search, Google Maps, and sites protected by Cloudflare's "Under Attack" mode. If you are unsure, try your request without the captcha parameter first - you can always add it if you start getting challenge pages.
What this costs
CAPTCHA solving is included in the standard $0.01 per page price. There is no extra charge when a CAPTCHA is detected and solved, no per-solve fee, and no separate CAPTCHA credit pool. Many scraping APIs charge additional credits for CAPTCHA solving or require you to bring your own solver subscription. Browser7 includes it.
See it in practice
These guides use CAPTCHA solving on sites that serve challenges:
- How to Scrape Google Search Results - reCAPTCHA on search queries
- How to Scrape Google Maps - reCAPTCHA on map searches