How to Screenshot CAPTCHA-Protected and Bot-Blocked Pages (2026 Guide)
Discover how to screenshot CAPTCHA-protected and bot-blocked pages in 2026 using stealth mode, proxy routing, and delay parameters — with cURL code examples included.
One of the most common frustrations when using a screenshot API is landing on a blank page, a CAPTCHA challenge, or a Cloudflare interstitial instead of the actual content you wanted to capture. Anti-bot systems have become sophisticated in 2026 — they fingerprint headless browsers at the TLS layer, check canvas entropy, inspect timing patterns, and serve CAPTCHAs to anything that looks non-human. This guide explains why headless browsers trigger these defences and what you can do about it using ScreenshotFreeAPI's built-in tooling.
Why Headless Browsers Trigger CAPTCHAs
Modern anti-bot systems like Cloudflare Bot Management, Akamai Bot Manager, and Imperva do not rely on simple JavaScript checks anymore. They operate at multiple layers simultaneously. At the network layer, they inspect TLS cipher suites and JA3 fingerprints — headless Chromium presents a fingerprint that differs from Chrome on a real machine. At the browser layer, they check navigator.webdriver, WebGL renderer strings, canvas pixel noise, and mouse movement entropy. At the timing layer, they measure how quickly pages load and how humans interact with them.
A standard Playwright session fails many of these checks immediately. The result is either an infinite CAPTCHA loop or a silent redirect to an error page — meaning your screenshot captures the challenge, not the content.
ScreenshotFreeAPI's Stealth Mode
ScreenshotFreeAPI's Business and Enterprise plans include a stealth mode that applies a suite of browser patches before any page navigation. These patches normalize the TLS fingerprint, remove navigator.webdriver, inject realistic canvas noise, and simulate natural mouse movement timing. The result is a browser session that passes the most common bot detection heuristics.
Note
Stealth mode is available on Business and Enterprise plans. The free tier and Starter plan use standard Playwright without stealth patches.
To enable stealth mode, add the X-SFA-Stealth: true header to your request:
curl -X POST https://api.screenshotfreeapi.com/screenshots/web \
-H "Authorization: Bearer sfa_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "X-SFA-Stealth: true" \
-d '{
"url": "https://protected-site.com/pricing",
"fullPage": true,
"format": "png",
"delay": 3000,
"webhookUrl": "https://yourapp.com/hooks/screenshot"
}'Proxy Geo-Routing
Some sites serve different content based on visitor geography, or block data-center IP ranges entirely. ScreenshotFreeAPI supports proxy geo-routing: you specify a country code and the request routes through a residential proxy exit node in that country. This is useful for capturing region-specific pricing pages, geo-blocked content, or sites that blocklist cloud provider IP ranges.
curl -X POST https://api.screenshotfreeapi.com/screenshots/web \
-H "Authorization: Bearer sfa_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "X-SFA-Stealth: true" \
-d '{
"url": "https://geo-restricted-site.com",
"proxyCountry": "US",
"format": "png",
"delay": 2000
}'Using the Delay Parameter for Anti-Bot JS Clearance
Many anti-bot systems (Cloudflare's "Checking your browser" interstitial is the most famous) run a JavaScript challenge that takes 2–5 seconds to complete before redirecting to the real page. If your screenshot fires immediately after navigation, you capture the challenge page. Setting "delay": 5000 gives the challenge time to complete before the capture triggers.
Tip
Start with "delay": 3000 for Cloudflare-protected pages. If you still see the interstitial, increase to 5000. Combine with stealth mode for best results.
The Webhook Pattern for Stealth Requests
Stealth requests take longer than standard captures because the browser session must complete the anti-bot challenge sequence before the page renders. This makes the async webhook pattern especially important here. Rather than polling, register a webhookUrl and your endpoint receives a POST when the job completes — which might be anywhere from 5 to 30 seconds depending on the target site's challenge complexity.
# Full stealth + webhook request
curl -X POST https://api.screenshotfreeapi.com/screenshots/web \
-H "Authorization: Bearer sfa_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "X-SFA-Stealth: true" \
-d '{
"url": "https://protected-site.com",
"proxyCountry": "US",
"fullPage": true,
"format": "png",
"delay": 4000,
"webhookUrl": "https://yourapp.com/hooks/screenshot/completed"
}'
# Webhook payload received at your endpoint when complete:
# {
# "event": "job.completed",
# "jobId": "job_01hwxyz",
# "status": "completed",
# "screenshots": [{ "url": "https://sfa-results.s3.amazonaws.com/..." }]
# }Ethical Considerations and Legal Boundaries
Stealth mode is a powerful capability, and it comes with responsibility. Anti-bot systems exist for legitimate reasons: protecting login pages from credential stuffing, preventing scraping of proprietary data, and ensuring compliance with regional regulations. Before bypassing bot detection on any site, consider:
- Does the site's
robots.txtor Terms of Service prohibit automated access? Check before capturing. - Are you capturing publicly available information (pricing, product images, public profiles) or data behind authentication?
- Is there a public API or data export that would achieve the same result more reliably?
- If you are capturing competitor pricing for legitimate business intelligence, most jurisdictions permit this for public data — but consult a lawyer for your specific use case.
Warning
ScreenshotFreeAPI's stealth mode must not be used to bypass authentication, access private user data, or violate a site's Terms of Service. Misuse may result in account termination.
Used responsibly, stealth mode enables a legitimate category of automation: capturing public web pages that happen to be protected by bot detection that was designed to block non-human browsers generally, not your specific use case specifically.
Upgrade to Business to unlock stealth mode, proxy geo-routing, and priority job processing.
Start free — no credit card