Se il tuo script Playwright funzionava la scorsa settimana e ora sta colpendo la pagina di sfida di Cloudflare — o ritornando HTTP 403 con error 1020 — il problema non è quasi mai il tuo codice. Il problema è che il tuo browser si sta identificando come automazione attraverso una pila di segnali che potresti non sapere che sta emettendo.
Questa guida spiega perché gli script Playwright vengono bloccati da Cloudflare, ciò che specificamente Cloudflare sta leggendo, e le quattro classi di correzione classificate da quanto siano affidabili in produzione.
Perché Playwright Triggers Cloudflare Bot Detection
Le sessioni di Playwright sono bloccate da Cloudflare perché il browser Chromium basato su Playwright-driven predefinito emette un insieme coerente di segnali che il sistema di gestione del bot di Cloudflare è stato addestrato a riconoscere come automazione. Il blocco non è casuale e non si basa solo sul limitatore di velocità, si basa sulla classificazione dell'identità che avviene prima della prima interazione con la pagina del tuo script.
I primi 200 millisecondi di un carico di pagina protetto da Cloudflare comportano una pila di impronte digitali e controlli comportamentali che funzionano prima che il codice possa agire. page.goto() risolve, la sessione è spesso già classificata.
Perché questo peggiora nel tempo
La gestione del bot di Cloudflare aggiorna continuamente i suoi modelli di rilevamento. Documentazione di gestione bot di Cloudflare, il sistema utilizza l'apprendimento automatico addestrato sui modelli di traffico attraverso milioni di siti — il che significa la firma che il vostro setup stealth emette oggi può essere benigno, ma la firma che emette il mese prossimo potrebbe essere contrassegnato perché il modello di Cloudflare è aggiornato.
I sei segnali Cloudflare legge da Playwright
Per risolvere il problema di Playwright Cloudflare, devi sapere cosa sta controllando Cloudflare. Ci sono sei segnali ad alto impatto.
1. Il navigator.webdriver bandiera
Il segnale più semplice. Un set di Chromium controllato da vaniglia Playwright navigator.webdriver = true. I sistemi di rilevamento leggere questo sulla prima esecuzione dello script. La maggior parte dei plugin di stealth gestire questo, ma alcune patch sono essi stessi rilevabili.
2. Impronte TLS (JA3 / JA4)
Il Chromium sottostante di Playwright produce un TLS Client Hello con un determinato ordine di cifratura, un elenco di estensioni e un insieme di curve ellittiche. Questo forma un hash JA3 o JA4 che Cloudflare può abbinare alle firme dei clienti di automazione note. Specifiche JA3 open source di Salesforce spiega, la stretta di mano TLS stessa è improntabile indipendente dall'agente utente.
3. ordinazione della cornice HTTP/2
L'ordine in cui un browser invia HTTP/2 SETTINGS, WINDOW_UPDATE e HEADERS frames è coerente all'interno di una versione Chrome ma differisce da librerie di automazione che costruiscono HTTP/2 in modo diverso.
4. Tela, WebGL e impronte audio
Quando la pagina esegue la sfida Cloudflare JavaScript, rende i contenuti di prova a contesti di tela e WebGL e rilegge i dati dei pixel.Un campione Playwright Chromium produce rimozioni deterministiche e ripetibili. Lo stesso riavvio che appare su migliaia di sessioni è di per sé un segnale bot.
5. Timezone × locale × coerenza IP geo
Se il tuo browser presenta en-US e America/New_York mentre il vostro IP attraversa un datacenter di Francoforte, il mismatch è un segnale bot quasi sicuro.
6. Segnali comportamentali dopo il carico di pagina
Se la sfida passa la fase di impronta digitale, i controlli comportamentali iniziano: topo movimento entropia, pattern di scorrimento, keystroke cadence.
Le Quattro Classi di Fisso, Ranked
Ci sono quattro categorie reali di fix per il blocco Playwright + Cloudflare, che differiscono enormemente per quanto tempo continuano a lavorare.
Tier 4 (meno affidabile): manipolazione di bandiere di base e di user-agent
Questa è la prima cosa che la maggior parte degli sviluppatori prova: l'impostazione di un agente utente personalizzato, rimuovendo --enable-automation bandiera e sovrascrittura navigator.webdriver via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via via addInitScript. Si rivolge a uno solo dei sei segnali sopra.
Lifespan in produzione: Giorni a settimane. Il rilevamento di base di Cloudflare è molto oltre questo strato.
Quando è appropriato: Siti con nessun rilevamento di bot reale, dove è necessario solo sopprimere la bandiera più evidente.
Livello 3 (limitata affidabilità): Stealth plugins
Il puppeteer-extra-stealth famiglia di plugin, portato a Playwright tramite librerie come playwright-stealth. Queste patch una dozzina o più proprietà del navigatore, sovrascrive i rilettori di tela con il rumore, e gestiscono diversi dei segnali sopra attraverso l'iniezione JavaScript di livello pagina.
Lifespan in produzione: Settimane a pochi mesi. I patch stessi hanno sistemi di rilevamento delle firme in grado di identificare, e le patch funzionano su uno strato diverso rispetto al canale di rendering sottostante di Chromium — così i riscontri di tela e WebGL tradiscono ancora il browser quando sfidato con i casi di bordo.
Quando è appropriato: Raschiamento leggero di siti, prototipi, ambienti moderatamente protetti, in cui eventuali guasti sono accettabili.
Perchè alla fine fallisce: La patch a livello di pagina è un modello noto. ricerca pubblicata sulla rilevazione dei browser senza testa, i browser automatizzati possono essere identificati dal tempismo e dal comportamento delle loro patch anche quando tali patch con successo spoof valori di proprietà.
Livello 2 (affidabilità moderata): plugin Stealth + proxy residenziale + comportamento attento
Aggiungendo un proxy residenziale e strumentalizzando il vostro script con tempistiche realistiche — ritardi variabili, curve di movimento del mouse, schemi di scorrimento — allo stack del plugin di stealth.
Lifespan in produzione: Mesi. Qui la maggior parte dei team di automazione si stabiliscono per siti ragionevolmente protetti.
La modalità di fallimento rimanente: Il problema della coerenza IP locale × fuso orario ×. Si acquista un proxy residenziale in Germania; si dimentica di impostare la timezone del browser in Europa/Berlino; le intestazioni di lingua ancora inviare en-US. Il errore è silenzioso — il tuo script non sbaglia — ma il tasso di sfida di Cloudflare sale costantemente nelle settimane.
Livello 1 (più affidabile): coerenza dell'identità del motore
Ciò significa una costruzione di Chromium dove le superfici di impronta digitale sono patchate all'interno del browser binario stesso, non tramite iniezione JavaScript. Significa un profilo in cui vengono generati tela, WebGL, audio, proprietà del navigatore, schermo, font, timezone e locale per abbinarsi e la geografia IP proxy.
Questo è ciò che un Clawbrowser fornisce. Il patching a livello motore significa che i sistemi di rilevamento non possono modellare la stealth stessa, perché non c'è nessun codice stealth in esecuzione sulla pagina — i valori sono semplicemente ciò che il browser segnala in modo nativo.
Se si sta scegliendo tra la commutazione di Playwright a un runtime anti-detect locale e spostarlo a un servizio di browser ospitato, vedere il Clawbrowser vs Browserbase confronto per la distribuzione, la privacy e i costi di scambio.
Lifespan in produzione: Indefinite, con rigenerazione periodica del profilo. L'approccio si degrada con grazia perché ogni profilo è unico piuttosto che portare una nota firma stealth.
Quando è appropriato: Qualsiasi flusso di lavoro di produzione in cui l'affidabilità conta più della convenienza di rimanere sul magazzino Chromium. I carichi di lavoro dell'agente AI in particolare, perché lo strato di orchestrazione può continuare a lavorare invariato quando lo strato di runtime è oscillato sotto.
Attuazione passo-passo: Il livello 1 Fix
Spostarsi da un Playwright stock + installazione plugin stealth a un runtime di livello del motore richiede quattro passaggi e un cambio di codice una linea.
Passo 1: Identificare ciò che il tuo stack esistente sembra
Prima di cambiare qualcosa, testa la configurazione esistente con un ispettore pubblico di impronte digitali come browserleaks.com o creepjs. Nota quali superfici vengono segnalate. La maggior parte delle configurazioni di plugin stealth fallisce almeno su Canvas, WebGL e TLS.
Passo 2: Installare il runtime
Per Clawbrowser, partenza dal standalone clawctl archivio in pubblico
clawbrowser/clawctl rilascio:
# Download the matching clawctl-* archive for your OS/arch.
open https://github.com/clawbrowser/clawctl/releases/latestDopo l'estrazione dell'archivio, installare l'integrazione e il set dell'agente corrispondente la chiave API:
clawctl install --agent claude-code --json
clawctl config set --api-key "clawbrowser_xxxxx"Passo 3: Avviare una sessione gestita con un profilo di impronte digitali
clawbrowser start --session work -- --fingerprint=fp_us --country=US --connection-type=residential
clawbrowser endpoint --session work
# prints: http://127.0.0.1:9222Il --fingerprint, --countrye --connection-type le bandiere selezionano un profilo in cui la tela, WebGL, navigatore, schermo, font, timezone, locale, e il proxy residenziale legato IP si allineano all'identità degli Stati Uniti.
Passo 4: Cambia una riga nel tuo script Playwright
Prima:
browser = await p.chromium.launch(headless=False)Dopo:
endpoint = "http://127.0.0.1:9222"
browser = await p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].pages[0]Tutto a valle — locatori, navigazione, affermazioni — funziona invariato. L'agente o la logica di automazione è intatta.
Fase 5: verifica prima di eseguire il traffico di produzione
Eseguire la pagina di verifica che spedisce con il runtime per confermare l'identità verso l'esterno è quello che ti aspetti:
clawbrowser start --session work --verify -- https://example.comQuesto è il passo che la maggior parte delle squadre salta e la maggior parte delle squadre più tardi rimpiangono. Verificare una volta dopo la generazione di profili cattura la classe di bug locale-mismatch silenzioso.
Per i modelli di integrazione CDP completi, inclusa la distribuzione multisessione, vedere il Documentazione di Clawbrowser.
Risultati e vantaggi previsti
Dopo essersi spostati dalla stealth-plugin-based stealth alla coerenza dell'identità di livello motore, le metriche che cambiano nella produzione sono:
- Il tasso di CAPTCHA scende dal ~30–60% sui siti protetti da Cloudflare (tipico con plugin stealth) alle percentuali di singolo cifra, con i restanti CAPTCHAs che sono legittimamente innescati da modelli comportamentali piuttosto che dalla classificazione dell'identità.
- La durata di vita della sessione si estende da ore a giorni o settimane, perché la sessione non viene progressivamente contrassegnata dopo le prime dozzine di azioni.
- La manutenzione in testa gocce perché le patch non devono essere aggiornate ogni volta che il modello di rilevamento di Cloudflare si evolve.
- I flussi di lavoro del conto Multi diventano affidabili perché ogni sessione ha un'identità coerente e distinta piuttosto che la stessa firma del "patch" stealth condivisa in tutte le sessioni.
I siti che emettono una sfida interattiva ad ogni nuova sessione continueranno a farlo, e qualsiasi CAPTCHA che appaiono ancora devono essere gestiti — sia regolando il flusso di lavoro, utilizzando un risolutore CAPTCHA, o accettando che alcuni flussi di lavoro richiedono un intervento umano-in-the-loop.
Errori comuni da evitare
Layering CDP sovrascrive in cima alle patch di livello motore
Se il tuo runtime gestisce le impronte digitali a livello binario, non utilizzare anche i comandi CDP di Playwright per sovrascrivere le proprietà del navigatore o il comportamento della tela. I due strati possono essere in disaccordo, producendo incongruenze rilevabili che l'approccio a livello del motore è stato specificamente progettato per evitare.
Rotazione del proxy di metà sessione
La rotazione dei proxy durante una sessione attiva — la commutazione dell'IP a metà strada attraverso un flusso di lavoro — è un segnale bot forte perché gli esseri umani reali non cambiano l'IP ogni 30 secondi.
Ignorando l'allineamento timezone/locale
Se si configurano manualmente i proxy, è necessario anche allineare manualmente la fuso orario del browser, locale e lingue accettate con la geografia del proxy. Dimenticare uno di questi è la modalità di guasto silenzioso più comune.
Riutilizzare la stessa impronta digitale attraverso le identità "diverse"
Due sessioni con la stessa impronta digitale di tela e la stessa stringa di renderr WebGL sono la stessa identità a Cloudflare, indipendentemente da quale agente utente essi presentano.
Trattare modalità senza testa come identico a testa
Chrome senza testa ha ulteriori informazioni sulle impronte digitali (uscita audio diversa, elenco plugin predefinito diverso, diversi percorsi di rendering in alcuni casi). Se il debug locale è in modalità headful e la distribuzione di produzione è intestata, convalidare l'identità di produzione separatamente.
Domande frequenti
Perché il mio script Playwright funziona localmente ma viene bloccato in produzione?
La ragione più comune è la differenza ambientale: lo sviluppo locale utilizza il tuo IP residenziale, la tua zona in tempo reale e l'impronta digitale dello sviluppatore-macchina, mentre la produzione viene eseguita in un contenitore Linux dietro un datacenter o un proxy IP, con superfici potenzialmente diverse di timezone, locale e impronte digitali.
Utilizzare un proxy residenziale solo risolvere il problema Cloudflare?
No. Un proxy residenziale fissa il segnale IP-geo ma lascia invariata la tela, WebGL, TLS, il navigatore e il segnale del fuso orario. Se quelli ancora emettono schemi di automazione, Cloudflare rileva ancora la sessione. La correzione deve affrontare tutti i segnali insieme, non solo l'IP.
È playwright-stealth abbastanza per siti protetti da Cloudflare?
Per i siti leggermente protetti, spesso sì. Per i siti con Cloudflare Bot Management attiva o qualsiasi soluzione robot aziendale moderatamente recente, tipicamente no - e l'affidabilità si degrada nel corso di mesi come aggiornamento modelli di Cloudflare. Per i flussi di lavoro di produzione in cui l'affidabilità conta, la stealth di livello plugin ha un soffitto noto.
Che dire del programma "Verified Bot" di Cloudflare - dovrei solo registrare il mio bot?
Se il tuo caso di utilizzo si qualifica (scala motore di ricerca, servizi di monitoraggio, strumenti di accessibilità), Programma Bots verificato di Cloudflare La maggior parte dei flussi di lavoro dell'automazione e dell'agente AI non si qualificano per lo stato del bot verificato, e l'automazione unverificata deve gestire il rilevamento sui propri meriti.
Questo approccio lavorerà contro altri fornitori anti-bot (DataDome, Akamai, PerimeterX)?
Gli stessi principi si applicano: più coerente la vostra identità a livello binario, i sistemi di rilevamento meno facilmente possono contrassegnare la sessione come automazione. I segnali specifici di ciascun fornitore pesano in modo diverso — DataDome si appoggia pesantemente sui modelli comportamentali, Akamai su TLS, PerimeterX su un mix — ma la coerenza dell'identità a livello di motore è la risposta strutturale su tutti loro.
Conclusioni
Il modello è coerente: Playwright + stock Chromium produce segnali rilevabili, patch di livello pagina affrontano alcuni segnali mentre essi stessi diventano rilevabili, e l'unica risposta durevole è coerenza di identità all'interno del browser binario più egresso proxy che corrisponde.
Se il tuo script continua a essere bloccato da Cloudflare, il cambiamento più alto-leverage si sta muovendo da "bolt stealth su Chromium" a "usare una costruzione di Chromium dove la stealth è il default e il proxy è legato a un profilo coerente".
Clawbrowser Si parla di CDP standard, quindi il tuo script Playwright esistente cambia di una riga — e il browser sottostante gestisce l'impronta digitale, il binding proxy e la coerenza dell'identità che nessun approccio basato sul plugin può corrispondere.
Continua a leggere
Articoli correlati

Puppeteer-Extra-Stealth è obsoleto: cosa usa l'automazione moderna
puppeteer-extra-plugin-stealth non viene aggiornato dal 2023. Ecco perché fallisce con i sistemi anti-bot moderni e cosa usare al suo posto.
Leggi l’articolo →
Perché la vostra automazione continua a triggering CAPTCHA: la guida diagnostica a 7 segmenti
Se il tuo script ha funzionato ieri e sta colpendo CAPTCHA oggi, la causa è identificabile. Camminare attraverso i sette segnali - in ordine di probabilità.
Leggi l’articolo →