Playwright Cloudflare Bypass 2026: 3 Methods That Still Work (9 Don't)
Bottom line (last updated May 27, 2026 — Cloudflare ML v9 / Web Bot Auth era):
- What still works: residential IP + real mobile fingerprint + human-paced input. Indicative bypass rate ~95–97% on standard Cloudflare, ~75–78% on Enterprise (internal May 2026 test — variance by target is real).
- What stopped working: playwright-extra stealth on a VPS IP, undetected-chromedriver on its own, FlareSolverr, hard-coded TLS clients (curl-impersonate solo). For a deeper diagnosis of why naive playwright-stealth fails, see playwright-stealth not working in 2026.
- The wedge in May 2026: Cloudflare now offers Web Bot Auth — a cryptographic agent passport — partnered with Anchor Browser and Browserbase. If you're a legitimate agent on an opted-in site, signing in is cleaner than evading. For everything else, residential + fingerprint + behavior is still the only path.
Skip to the 12-method test table · download raw results JSON · working Playwright code · FAQ

Contents
- Why Playwright gets blocked in 2026 (Cloudflare ML v9)
- The 3 things Cloudflare actually checks
- What changed in January–May 2026
- 12-method test results (the table you came for) · raw JSON
- Residential IP + real fingerprint — the only stack that survives
- Working Playwright + Human Browser code
- When to use Web Bot Auth vs stealth
- FAQ
If you've tried to scrape a Cloudflare-protected website with Playwright in 2026, you know the pain. Your script lands on the page, and within 2 seconds you're staring at a challenge page or a 403. It doesn't matter how many stealth plugins you add — vanilla Playwright on a data center IP doesn't stand a chance against Cloudflare's current bot detection stack.
This guide covers exactly what Cloudflare checks, why most workarounds fail in 2026, and the three methods that still work — starting with the headline number: we ran the same script against 12 stack variations in May 2026. Nine fail on the first request. Three pass. The full result table is below; the raw JSON is downloadable if you want to cite or fork the test.
Why Playwright Gets Blocked by Cloudflare in 2026
Cloudflare's bot protection has evolved significantly. In 2023, you could get away with playwright-extra and the stealth plugin. In 2024, you needed to hide automation flags. In 2026, Cloudflare runs a multi-signal analysis that no single trick can defeat.
The core problem is this: your IP address is the first thing Cloudflare checks. Before your browser fingerprint is even evaluated, Cloudflare knows whether your IP belongs to a data center, a VPN provider, or a real home internet connection.
Common misconception: Adding stealth plugins to Playwright will bypass Cloudflare. In 2026, stealth plugins alone fail because Cloudflare's IP reputation database flags all major cloud providers (AWS, DigitalOcean, Hetzner, OVH) instantly — regardless of your browser fingerprint.
When you run Playwright from a VPS, your traffic originates from an ASN (Autonomous System Number) that Cloudflare recognizes as a data center. The risk score is automatically elevated to maximum, and no amount of fingerprint spoofing will save you.
Cloudflare error codes you'll hit (1020, 1010, 403, "Just a moment…")
When Playwright is blocked, Cloudflare usually tells you exactly how. The codes you'll paste into Google most:
- Error 1020 — Access Denied: a firewall/WAF rule blocked the request — almost always because the IP is a known data-center range. Fix: a clean residential IP.
- Error 1010 — browser signature banned: Cloudflare flagged the client fingerprint (headless hints, automation signals). Fix: a real browser fingerprint, not a patched headless one.
- HTTP 403 / "Sorry, you have been blocked": the managed challenge failed — typically IP reputation and fingerprint together. Fix: residential IP + realistic fingerprint + human-paced input.
- "Just a moment…" /
cf_chlinterstitial that never resolves: the JS challenge is running but the client looks automated, so it loops. Fix: same stack — the challenge passes once the browser looks real.
All four trace back to the same two signals — IP reputation and fingerprint consistency — which is exactly what Cloudflare scores next.
The 3 Things Cloudflare Actually Checks
Understanding what Cloudflare evaluates helps you understand why most bypass attempts fail. Here's the actual signal stack in 2026:
1. IP Reputation & ASN Classification
Cloudflare maintains a massive database of IP address classifications. Every request is immediately tagged: residential ISP, mobile carrier, VPN, hosting provider, proxy service, Tor exit node. Data center IPs from AWS, DigitalOcean, Hetzner, and similar providers get an automatic high-bot-probability score. There's no way around this check — it happens before your JavaScript even runs.
2. Browser Fingerprint Consistency
Cloudflare runs a JavaScript challenge that inspects dozens of browser properties: navigator.webdriver, canvas fingerprint, WebGL renderer, audio context, font enumeration, plugin list, screen resolution, timezone offset, language settings, and hardware concurrency. A headless Chromium browser running on a Linux server has telltale signatures that differ from a real iPhone or Windows PC.
3. Behavioral Analysis
Mouse movement patterns, scroll behavior, time-on-page, interaction speed, and click patterns are all analyzed. Bots tend to interact with pages instantly and mechanically. Real users have variance — they pause, they scroll at different speeds, they move the mouse in curved paths.
The key insight: You need to solve ALL three simultaneously. Fix the IP but not the fingerprint — blocked. Fix the fingerprint but not the IP — blocked. Fix both but move like a robot — eventually blocked. This is why a complete solution like Human Browser exists.
What changed in January–May 2026
If you last debugged a Cloudflare block in 2025, the field has moved under you. Three concrete shifts in the first half of 2026 explain why scripts that worked in November are now returning HTTP 403 in May.
1. ML model v9 is the new default (rolled to all zones, Q1 2026)
Cloudflare's machine learning bot score model v9 is now the default on every new zone and on existing zones opted into auto-updates. v9 weights TLS fingerprint (JA4), HTTP/2 frame ordering, and behavioral telemetry more aggressively than v8. The practical effect: Playwright's default TLS handshake on Linux now stands out even when the browser fingerprint is perfect. You either need a browser whose TLS stack matches a real device (which is what Patchright and Human Browser's headful Chrome handle), or you accept a higher block rate on Enterprise-protected zones.
2. Anomaly detection: bot score floor of 2
Per the Cloudflare bot solutions changelog, events flagged by the anomaly detection engine are now pinned to a bot score of 2 (1–99 scale, lower = more bot-like). This is brutal: previously borderline-pass automations are now hard-failing on Enterprise rulesets that block anything < 30. The mitigation is behavioral — slow down, scroll, vary timing, and never burst-request from the same residential session.
3. Web Bot Auth: the legitimacy lane opens (May 2026)
In May 2026 Cloudflare announced Web Bot Auth, a standard for cryptographically signing AI-agent traffic so verified agents pass without challenge. Anchor Browser shipped first-party support the same week, describing the experience as "Stable, CAPTCHA-free sessions; fewer flaky retries" — and Browserbase launched their integration on the same announcement. This is genuinely good news for legitimate AI agents — but it's an opt-in by the site owner, and the long tail of Cloudflare-protected sites (the ones you're actually trying to reach) have not enabled it. For the next 12–18 months the realistic plan is: use Web Bot Auth where you can, residential + fingerprint everywhere else. We cover the decision tree in the Web Bot Auth section below.

12-method test results — internal test, May 2026
We ran the same Playwright script against 12 stack variations, targeting 8 Cloudflare-protected sites (4 Pro, 3 Business, 1 Enterprise — internal test, May 2026, ~500 requests/variant). "Pass" = HTTP 200 with actual page content, not a challenge or 403. Numbers are indicative for a same-day snapshot; your mileage will vary by target.
Raw data: the full request-level shape is available as cf-bypass-12-methods.json — { method, ip_type, fingerprint, behavior, cf_pro_pass_pct, cf_enterprise_pass_pct, verdict } per row. Cite it, fork the test, run it yourself.
| # | Method | IP | Fingerprint | Behavior | CF Pro | CF Ent. | Verdict |
|---|---|---|---|---|---|---|---|
| 1 | Vanilla Playwright | VPS | Default Chromium | None | ~2% | 0% | Dead |
| 2 | playwright-extra + stealth | VPS | Patched | None | ~5% | 0% | Dead |
| 3 | undetected-chromedriver | VPS | Patched | None | ~8% | 0% | Dead |
| 4 | FlareSolverr (proxied) | VPS | Auto-solve | None | ~3% | 0% | Dead |
| 5 | curl-impersonate solo | VPS | JA4 ok | N/A | ~6% | 0% | No JS |
| 6 | Puppeteer + DC proxy | DC proxy | Default | None | ~4% | 0% | Dead |
| 7 | VPN + Playwright | VPN (flagged) | Default | None | ~10% | 0% | Flaky |
| 8 | Residential IP only | Residential | Default | None | ~35% | ~5% | Partial |
| 9 | Residential + stealth FP | Residential | Patched | None | ~70% | ~25% | Decent |
| 10 | Residential + iPhone FP + human input | Residential | iPhone 15 Pro | Bezier + jitter | ~95% | ~75% | Works |
| 11 | Human Browser (managed) | Residential | iPhone 15 Pro | Managed | ~97% | ~78% | Works |
| 12 | Web Bot Auth (signed agent) | N/A | N/A | N/A | 100% opted-in | 0% non-opted | Where supported |
Methods 10, 11, 12 are the three that still work in May 2026. Method 10 is the DIY stack; method 11 is the managed equivalent at humanbrowser.cloud; method 12 is the legitimacy lane and only works on sites that have explicitly enabled Cloudflare Web Bot Auth verification. Full per-target shape: cf-bypass-12-methods.json.

There is no magic flag. There is only a stack.
The Solution: Residential IP + Real Fingerprint
The only approach that works reliably in 2026 is using a residential proxy (a real home internet connection) combined with a browser fingerprint that matches what a real device would produce.
Here's what the complete solution looks like:
- Residential IP from a real ISP (e.g., DIGI Romania, AT&T, BT) — not a data center
- iPhone 15 Pro fingerprint — correct UA, viewport, pixel ratio, touch events, platform string
- Human behavior — Bezier mouse curves, realistic typing speed (60–220ms/keystroke), natural scroll
- Anti-detection flags —
navigator.webdriver = false, real plugin list, correct canvas fingerprint
Human Browser packages all of this into a single npm package with one function call. Let's walk through the setup.
Step-by-Step: Setting Up Human Browser with Playwright
Step 1: Install the package
npm install @virixlabs/humanbrowserStep 2: Get residential proxy credentials
You need residential proxy access. Try it for $1 (about 4 typical tasks) at humanbrowser.cloud/install — pay-as-you-go: $0.10/hr browser time + $0.02 per agent step (AI included) + $4/GB residential proxy, no subscription. You'll receive your proxy username and password. If you want a deeper walkthrough of the proxy wiring itself, see our complete guide to Playwright with a residential proxy, and the side-by-side benchmark in best residential proxy for scraping 2026.
Step 3: Set environment variables
# Residential proxy credentials from humanbrowser.cloud
PROXY_USER=your_proxy_username
PROXY_PASS=your_proxy_password
PROXY_HOST=brd.superproxy.io
PROXY_PORT=22225Step 4: Use launchHuman() in your script
const { launchHuman } = require('@virixlabs/humanbrowser');
async function scrapeCloudflareProtectedSite() {
const { browser, page, humanScroll, humanRead } = await launchHuman();
// Navigate — residential IP + real fingerprint passes Cloudflare
await page.goto('https://example-cloudflare-protected.com', {
waitUntil: 'domcontentloaded',
timeout: 30000
});
// Simulate reading — critical for behavioral checks
await humanRead(page);
// Natural scroll behavior
await humanScroll(page, 'down');
// Extract your data
const content = await page.evaluate(() => document.body.innerText);
await browser.close();
return content;
}
scrapeCloudflareProtectedSite().then(console.log).catch(console.error);Full working implementation
Here's a complete, production-ready example for scraping a Cloudflare-protected site:
const { launchHuman } = require('@virixlabs/humanbrowser');
async function bypassCloudflare(url) {
const { browser, page, humanRead, humanScroll, sleep } = await launchHuman({
mobile: true, // iPhone 15 Pro fingerprint
country: 'gb' // UK residential IP
});
try {
console.log('Navigating with residential IP...');
await page.goto(url, { waitUntil: 'networkidle' });
// Wait for Cloudflare challenge to resolve (if any)
await sleep(2000);
// Check if we passed the challenge
const title = await page.title();
if (title.includes('Just a moment') || title.includes('Attention Required')) {
// Still on challenge — wait longer
await sleep(5000);
}
// Behave like a human reader
await humanRead(page);
await humanScroll(page, 'down');
await humanRead(page);
const data = await page.evaluate(() => ({
title: document.title,
text: document.body.innerText.substring(0, 2000)
}));
console.log('Success:', data.title);
return data;
} finally {
await browser.close();
}
}
// Usage
bypassCloudflare('https://your-target-site.com')
.then(d => console.log(d))
.catch(e => console.error('Failed:', e.message));If you're wiring Cloudflare bypass into an autonomous agent rather than a one-off script, the same residential IP + fingerprint stack plugs straight into the patterns in our guide on browser automation for AI agents.

When to use Web Bot Auth vs stealth
Web Bot Auth is the first real attempt at a polite protocol between AI agents and site owners. Your agent signs each HTTP request with a private key; Cloudflare verifies the signature against a public registry; verified agents pass without a challenge. The reference implementation is open source. Anchor's framing of the user experience after wiring it up: "Stable, CAPTCHA-free sessions; fewer flaky retries" — exactly the headache verified-agent traffic is designed to remove.
Use Web Bot Auth when:
- You're building a long-running B2B AI agent (procurement, research, customer support)
- The target sites are your customers, your partners, or large platforms that have publicly opted in
- You can publish a stable signing key and accept rate-limiting on a known identity
Stick with residential + fingerprint when:
- You're scraping public data the site owner doesn't want scraped (price intel, SERPs, social) — Web Bot Auth doesn't change permission, it just exposes you
- Your target site hasn't enabled verified-agent acceptance — which is >99% of sites today
- You need to look like a regular consumer device, not a declared agent
Human Browser supports both lanes: residential IP + real desktop Chrome fingerprint by default (iPhone profile on request), and a managed signed-agent profile on its A2A endpoint for verified-agent flows.
Bypass Cloudflare without writing the stack. Pay-as-you-go: $0.10/hr browser time, $4/GB residential proxy, $0.005/captcha, $0.02 per agent step with the AI included. No subscription. Unused balance never expires. 75 residential countries. Try it for $1 — about 4 typical tasks; top up from $5.
A2A endpoint for agents:
https://agent.humanbrowser.cloud/a2aTry it for $1 — humanbrowser.cloud/install
Or read the side-by-side: Human Browser vs Browserbase (2026)
FAQ
Does Playwright get blocked by Cloudflare in 2026?
Yes. Vanilla Playwright running on a data center IP is blocked within seconds by Cloudflare's bot detection. You need both a residential IP and a realistic browser fingerprint to bypass it reliably.
What is the best way to bypass Cloudflare with Playwright in 2026?
The most reliable method in our May 2026 12-method test: residential IP + iPhone 15 Pro fingerprint + human-paced input (Bezier mouse curves, 60–220ms keystrokes). ~95% pass on Cloudflare Pro, ~75% on Enterprise. Human Browser packages this as a single npm install at $0.10/hr + $0.02/agent step + $4/GB pay-as-you-go.
Does playwright-extra with stealth plugin bypass Cloudflare?
In 2026, playwright-extra stealth alone is not enough. Cloudflare has adapted and now requires a real residential IP in addition to fingerprint spoofing. The stealth plugin helps with some checks but fails the IP reputation check.
Does playwright-stealth still work in May 2026?
On its own, no. Across our 12-method test, playwright-extra + stealth on a VPS IP passed about 5% of Cloudflare Pro challenges and 0% of Enterprise. With a residential IP underneath it, the pass rate jumps to ~70% / ~25% — but a managed iPhone fingerprint with human-paced behavior still beats it. For the full diagnosis of which stealth-library failure modes are now hard-failing — fingerprint surface, CDP exposure, TLS, behavior — read playwright-stealth not working in 2026.
What is Cloudflare Web Bot Auth and should I use it?
Web Bot Auth is a Cloudflare standard, launched in May 2026, that lets AI agents cryptographically sign their HTTP requests so legitimate agents bypass challenges. Anchor Browser and Browserbase shipped support the same week. Use it when the target site has opted in (currently a small list); use residential + fingerprint everywhere else.
What's the cheapest residential proxy that bypasses Cloudflare?
Decodo / Smartproxy at $8.5/GB is the cheapest standalone option with usable bypass rates; NodeMaven at $7/GB has a smaller but cleaner pool. If you'd rather not run a proxy account at all, Human Browser bundles residential IPs in 75 countries at $4/GB pay-as-you-go with a matching browser fingerprint already wired in — see the full comparison in best residential proxy for web scraping 2026.
How is Human Browser different from Browserbase or Anchor Browser?
Browserbase and Anchor Browser are session-billed cloud Chromium with stealth layers; both shipped Cloudflare Web Bot Auth support in May 2026. Human Browser is pay-as-you-go at $0.10/hr browser time + $0.02 per agent step (AI included) + $4/GB residential proxy + $0.005/captcha + $0.02 per agent step with the AI included — no subscription, unused balance never expires. Side-by-side breakdown: Human Browser vs Browserbase.
How much does it cost to bypass Cloudflare with a residential proxy?
Human Browser is pay-as-you-go: $0.10/hr browser time and $4/GB residential proxy, plus $0.005/captcha and $0.02 per agent step with the AI included. No subscription, unused balance never expires, and you can try it for $1 (about 4 typical tasks).
Can this run on a $5 VPS without a display server?
Yes. Human Browser uses Playwright in headless mode — no display server, no VNC, no X11 required. It runs on any Linux server including the cheapest $5/mo VPS options from Hetzner or Contabo. The residential exit is what matters, not where your control plane lives.
Related Articles
- Playwright Cloudflare Bypass: The Complete 2026 Guide
- Best Apify Alternative in 2026 — Cheaper Web Scraping Platforms Compared
- playwright-stealth Not Working in 2026 — Fix Guide
- Best Residential Proxies for Scraping 2026 — Real Benchmarks
- Human Browser vs Browserbase — Honest 2026 Comparison
- Python Cloudflare Bypass: What Works in 2026
- Cloudflare Turnstile Bypass in 2026: What Actually Works
- Scrape LinkedIn Without Getting Banned in 2026
- Playwright with Residential Proxy: Complete Setup Guide 2026
- Browser Automation for AI Agents: OpenClaw + Playwright 2026