Dlaczego Twoje skrypty Playwright Keep Getting Blocked by Cloudflare (And How To Fix It) - zilustrowana okładka artykułu Clawbrowser

Dlaczego Twoje skrypty Playwright 'a są blokowane przez Cloudflare (I jak to naprawić)

Clawbrowser TeamPlaywrightzaćmienieanty-botrozwiązywanie problemów

Jeśli twój skrypt Playwright działał w zeszłym tygodniu i teraz naciska na stronę wyzwanie Cloudflare - lub zwraca HTTP 403 z error 1020 - problem jest prawie nigdy Twojego kodu. Problem jest taki, że Twoja przeglądarka identyfikuje się jako automatyzacja poprzez stos sygnałów możesz nawet nie wiedzieć, że emituje.

Ten przewodnik wyjaśnia, dlaczego skrypty Playwright zostają zablokowane przez Cloudflare, co konkretnie Cloudflare czyta, a cztery klasy fix w rankingu, jak niezawodne są one rzeczywiście w produkcji. TL; DR: łaty na poziomie konkursu kupić kilka tygodni; spójna tożsamość na poziomie browser- binarny jest jedynym trwałym fix.

Dlaczego triggery Playwright Cloudflare Bot Detection

Cloudflare blokuje sesje narzędzia Playwright, ponieważ domyślna przeglądarka Chromium z napędem narzędzia Playwright emituje spójny zestaw sygnałów, które system zarządzania botami Cloudflare został przeszkolony do rozpoznawania jako automatyzacja. Blok nie jest losowy i nie jest oparty na zasadzie ograniczenia rate- tylko - jest oparty na klasyfikacji tożsamości, która ma miejsce przed pierwszą interakcją skryptu ze stroną.

Pierwsze 200 milisekund obciążenia strony chronionej Cloudflare- zawiera stos odcisków palców i kontroli behawioralnych, które działają zanim kod może działać. page.goto() rozwiązuje, sesja jest często już tajne.

Dlaczego z czasem jest jeszcze gorzej?

Zarządzanie botami Cloudflare stale aktualizuje swoje modele wykrywania. Dokumentacja zarządzania botami Cloudflare, system wykorzystuje maszyny uczenia się na wzorach ruchu w milionach witryn - co oznacza, że podpis twój stealth setup emituje dzisiaj może być łagodny, ale podpis, który emituje w przyszłym miesiącu może być oznaczony, ponieważ model Cloudflare zaktualizował. Dlatego "przestał pracować" jest najczęstszym wzorem w Playwright + Cloudflare debugowanie wątków.

Sześciu Sygnałów Chmura odczytuje z Playwright

Aby naprawić problem Cloudflare narzędzia Playwright, musisz wiedzieć, co Cloudflare sprawdza.

1. navigator.webdriver bandera

Najbardziej podstawowy sygnał. navigator.webdriver = true. Systemy detekcji odczytywały to podczas pierwszego wykonania skryptu. Większość stealth plugins obsługują to, ale niektóre łaty są same wykrywalne.

2. Odcisk palca TLS (JA3 / JA4)

Bazujące na Chromium narzędzia Playwright produkuje TLS Client Hello ze specyficznym zamówieniem szyfrującym, listą rozszerzeń i krzywą eliptyczną. Tworzy to JA3 lub JA4 hash, który Cloudflare może dopasować do znanych podpisów klienta automatyzacji. Otwarta specyfikacja JA3 Salesforce wyjaśnia, że TLS handshake jest fingerprintable niezależnie od user agenta.

3. Zamówienie ramki HTTP/2

Kolejność, w jakiej przeglądarka wysyła HTTP/2 SETTINGS, WINDOW_UPDATE i ramki HEADERS jest spójna w wersji Chrome, ale różni się od bibliotek automatyki, które budują HTTP/2 inaczej.

4. Canvas, WebGL i odciski palców audio

Kiedy strona uruchamia wyzwanie Cloudflare JavaScript, sprawia, że zawartość testu do płótna i kontekstu WebGL i odczytuje z powrotem dane pikseli. Stock Playwright Chromium produkuje deterministyczne, powtarzalne odczyty. Ten sam odczyt pojawiający się w tysiącach sesji jest sygnałem bot.

5. Timezone × locale × IP geo spójność

Jeśli Twoja przeglądarka prezentuje en-US oraz America/New_York Podczas gdy trasy IP przez wrota danych we Frankfurcie, niedopasowanie jest blisko-pewien bot sygnał. Cloudflare krzyżówki -odniesienia wszystkie trzy.

6. Sygnały behawioralne po załadowaniu strony

Jeśli wyzwanie przechodzi etap odcisku palca, kontrole behawioralne zaczynają się: entropia ruchu myszy, wzory przewijania, kadencja klawisza. Czyste interakcje programowe (natychmiastowe kliknięcie na dokładnych współrzędnych) są tutaj wykrywalne.

Cztery klasy Fix, Ranked

Istnieją cztery rzeczywiste kategorie poprawek do blokowania Playwright + Cloudflare. Są one bardzo zróżnicowane w tym, jak długo pracują.

Poziom dokładności 4 (najniższy poziom niezawodności): czynnik użytkowy i podstawowa manipulacja flagą

Jest to pierwsza rzecz, którą większość deweloperów spróbować: ustawienie agenta użytkownika niestandardowe, usunięcie --enable-automation flaga i nadrzędne navigator.webdriver przez addInitScriptOdnosi się do jednego z sześciu sygnałów powyżej.

Lifespan w produkcji: Dni do tygodni. Podstawowa detekcja Cloudflare jest daleko za tą warstwą.

Kiedy jest to właściwe: Witryny bez prawdziwej detekcji bot, gdzie trzeba tylko stłumić najbardziej oczywistą flagę.

Poziom dokładności 3 (ograniczona niezawodność): Wtyczki stealth

W puppeteer-extra-stealth rodzina wtyczek, przeniesiona do Playwright poprzez biblioteki takie jak playwright-stealth. Łata kilkanaście lub więcej właściwości nawigatora, obejmie odczyty płótna z hałasem, i obsłużyć kilka sygnałów powyżej poprzez szczebel JavaScript wtrysku.

Lifespan w produkcji: Tygodnie do kilku miesięcy. Samo łatki posiadają systemy wykrywania podpisów mogą identyfikować, a łaty działają na innej warstwie niż Chromium gazociąg renderujący - więc płótno i WebGL wciąż zdradzają przeglądarkę, gdy są zagrożone ze względu na przypadki krawędzi.

Gdy jest to właściwe: Lekkie skrobanie umiarkowanie chronionych miejsc, prototypów, środowisk, gdzie okazjonalne niepowodzenia są dopuszczalne.

Dlaczego ostatecznie nie: Page- poziom łatanie jest znanym wzorem. badania opublikowane na temat wykrywania przeglądarek bez głowy, automatyczne przeglądarki mogą być identyfikowane przez czas i zachowanie ich łat, nawet jeśli te łaty skutecznie spoof wartości nieruchomości.

Poziom 2 (umiarkowana niezawodność): Wtyczki stealth + proxy mieszkaniowe + ostrożne zachowanie

Dodawanie proxy mieszkalnego i instrumentowanie skryptu z realistycznym czasem - zmienne opóźnienia, krzywe ruchu myszy, wzory przewijania - do stealth plugin stock. To adresuje sygnał IP- geo i sygnał behawioralny.

Lifespan w produkcji: Miesiące. W tym miejscu większość zespołów automatyki zadowala się odpowiednio chronionymi miejscami.

Pozostający tryb awarii: Locale × timezone × IP competition problem. Kupujesz proxy mieszkaniowe w Niemczech; zapominasz ustawić strefę czasową przeglądarki w Europie / Berlinie; nagłówki językowe nadal wysyłają en-US. Niedopasowanie jest ciche - twój scenariusz nie jest błędny - ale Stopa Wyzwań Cloudflare stale rośnie w ciągu tygodni.

Poziom dokładności 1 (najbardziej wiarygodny): Spójność tożsamości na poziomie inżyniera

Oznacza to budowę Chromium, w której powierzchnie odcisków palców są połączone wewnątrz przeglądarki binarnej, a nie poprzez wstrzyknięcie JavaScript. Oznacza to profil, w którym płótno, WebGL, audio, właściwości nawigacyjne, ekran, czcionki, strefa czasowa i locale są generowane, aby dopasować się do siebie i geografii proxy IP. Oznacza to, że proxy jest związane z profilem, więc ustawienie jest automatyczne, a nie coś, co operator musi pamiętać.

To jest co Clawbrowser zapewnia. Engineer- poziom łatanie oznacza systemy wykrywania nie może wzorc- dopasować się do stealth sam, ponieważ nie ma kodu stealth uruchomiony na stronie - wartości są po prostu to, co przeglądarki raportuje native. Profile- związane proxy wyeliminować locale / timezone / IP niezgodność klasy awarii.

Jeśli wybierasz między przełączeniem Playwright na lokalny anti-detect runtime i przeniesieniem go do hostowanej usługi przeglądarki, zobacz porównanie Clawbrowser vs Browserbase za rozmieszczenie, prywatność i koszty handlu.

Lifespan w produkcji: Nieokreślony, z okresową regeneracją profilu. Podejście rozkłada się z wdzięcznością, ponieważ każdy profil jest unikalny, a nie nosi znaną sygnaturę ukrycia.

Gdy jest to właściwe: Każdy przepływ pracy produkcji, gdzie niezawodność ma większe znaczenie niż wygoda pozostania na stosie Chromium. Czynniki AI szczególnie, ponieważ warstwa orchestracji może pracować bez zmian, gdy warstwa runtime jest podmieniona pod spodem.

Etap-by@-@ Etap implementacji: Poziom 1 Fix

Przejście od konfiguracji wtyczki Playwright + stealth do runtime na poziomie enter- time podejmuje cztery kroki i jednoliniowej zmiany kodu.

Krok 1: Określić, jak wygląda istniejący stos

Przed zmianą czegokolwiek, uruchom istniejącą konfigurację z publicznym inspektorem odcisków palców jak browsers.com lub creepjs. Należy zauważyć, które powierzchnie są oznaczone. Większość stealthink-plugin setupy nie na co najmniej płótnie, WebGL i TLS.

Krok 2: Zainstaluj runtime

Dla Clawbrowser, rozpocząć od samodzielnego clawctl archiwum publiczne clawbrowser/clawctl zwolnienie:

# Download the matching clawctl-* archive for your OS/arch.
open https://github.com/clawbrowser/clawctl/releases/latest

Po pobraniu archiwum, zainstaluj integrację pasującego agenta i ustaw Twój klucz API:

clawctl install --agent claude-code --json
clawctl config set --api-key "clawbrowser_xxxxx"

Krok 3: Rozpoczęcie zarządzanej sesji z profilem daktyloskopijnym

clawbrowser start --session work -- --fingerprint=fp_us --country=US --connection-type=residential
clawbrowser endpoint --session work
# prints: http://127.0.0.1:9222

W --fingerprint, --countryoraz --connection-type flagi wybierz profil, w którym płótno, WebGL, nawigator, ekran, czcionki, strefa czasowa, locale, i związany proxy mieszkalne IP wszystkie zgadzają się z tożsamością USA.

Krok 4: Zmień jedną linię w skrypcie Playwright

Przed:

browser = await p.chromium.launch(headless=False)

Po:

endpoint = "http://127.0.0.1:9222"
browser = await p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].pages[0]

Wszystko na dole - lokalizatory, nawigacja, asercje - działa bez zmian. Agent lub logika automatyki jest nietknięta.

Krok 5: Sprawdzić przed rozpoczęciem ruchu produkcyjnego

Uruchom stronę weryfikacji, że statki z biegiem czasu w celu potwierdzenia tożsamości na zewnątrz jest to, czego się spodziewasz:

clawbrowser start --session work --verify -- https://example.com

Jest to krok większość zespołów skip i większość zespołów później żałować. Weryfikacja raz po generowaniu profilu łapie cichy lokal-niedopasowanie klasy błędów.

Kompletne wzorce integracji CDP, w tym wielosesyjne rozmieszczenie, można znaleźć na stronie: Dokumentacja przeglądarki.

Oczekiwane wyniki i korzyści

Po przejściu od stealthin- plugin- stealth do ealter- level identity spójności, wskaźniki, które zmieniają produkcję są:

  • Wskaźnik CAPTCHA spada z ~ 30- 60% w miejscach chronionych Cloudflare- (typowych dla wtyczek stealth) do pojedynczych cyfr, a pozostałe CAPTCHA są prawnie wywołane przez wzorce zachowań, a nie klasyfikację tożsamości.
  • Sesja lifespan rozciąga się od godzin do dni lub tygodni, ponieważ sesja nie jest stopniowo oznaczana po pierwszych tuzinach działań.
  • Konserwacja nad głową spada, ponieważ łaty nie muszą być aktualizowane za każdym razem, gdy rozwija się model wykrywania Cloudflare.
  • Przepływy pracy na wielu kontach stają się wiarygodne, ponieważ każda sesja posiada spójną i odrębną tożsamość, a nie tę samą sygnaturę stealthins- patch, którą dzielą wszystkie sesje.

Uczciwe caveat: nie przeglądarka obejmie CAPTCHA uniwersalnie. Witryny, które wydają interaktywne wyzwanie do każdej nowej sesji będzie nadal to robić, i wszelkie CAPTCHA, które wydają się nadal muszą być obsługiwane - albo poprzez dostosowanie przepływu pracy, za pomocą rozwiązania CAPTCHA, lub akceptując, że niektóre przepływy pracy będą wymagać interwencji człowieka w pętli.

Często Błędy, których należy unikać

Warstwa CDP nadjeżdża na szczycie plastrów

Jeśli Twój runtime obsługuje odcisk palca na poziomie binarnym, nie używaj komend CDP narzędzia Playwright, aby nadrobić właściwości nawigatora lub zachowania płótna. Dwie warstwy mogą się nie zgadzać, tworząc wykrywalne niespójności, które podejście poziomu diploadera zostało specjalnie zaprojektowane, aby uniknąć.

Rotacja pośrednicząca sesji średniej

Obroty proxy podczas aktywnej sesji - przełączanie IP w połowie pracy - jest silnym sygnałem bot, ponieważ prawdziwi ludzie nie zmieniają IP co 30 sekund. Użyj jednego proxy na sesję; dla nowych tożsamości, rozpocząć nową sesję z regenerowanym profilem.

Ignorowanie ustawienia strefy czasowej / lokalizacji

Jeśli ręcznie skonfigurować proxy, należy również ręcznie dostosować strefę czasową przeglądarki, locale i akceptowane języki z geografią proxy. Zapominanie o jednym z nich jest najczęstszym trybem cichy awarii. Profilowe systemy proxy eliminują tę klasę błędów.

Ponowne użycie tego samego odcisku palca w "różnych" tożsamości

Dwie sesje z tym samym odciskiem palca na płótnie i tym samym linkiem WebGL renderer są tą samą tożsamością do Cloudflare, niezależnie od tego, jaki agent użytkownika każdy z nich obecny.

Traktowanie trybu bez głowy jako identycznego z trybem głowy

Chrome bez głowy posiada dodatkowe informacje o odciskach palców (różne wyjście audio, inna domyślna lista plugin, różne ścieżki renderowania w niektórych przypadkach). Jeśli Twój lokalny debugowanie jest w trybie headful, a Twoje wdrożenie produkcji jest bez głowy, potwierdzić tożsamość produkcji oddzielnie.

Często zadawane pytania

Dlaczego mój skrypt Playwright działa lokalnie, ale zostaje zablokowany w produkcji?

Najczęstszym powodem jest różnica środowiskowa: rozwój lokalny wykorzystuje twój adres IP mieszkalny, twój rzeczywisty czas i twój defeloper- maszyna odcisk palca, podczas gdy produkcja działa w kontenerze Linux za datacenter lub proxy IP, z potencjalnie inną strefą czasową, locale i powierzchni daktyloskopijnych. Kod orchestracji jest identyczny; warstwa identyczności jest zupełnie inna. Fix używa czasu biegania, który wytwarza spójną tożsamość w obu środowiskach.

Czy samo użycie proxy w domu starców rozwiązuje problem Cloudflare?

Nie. Rezydencyjny proxy naprawia sygnał IP- geo, ale pozostawia płótno, WebGL, TLS, nawigator, i sygnały strefy czasowej bez zmian. Jeśli te nadal emitują wzorce automatyzacji, Cloudflare nadal wykrywa sesję. Naprawianie musi dotyczyć wszystkich sygnałów razem, nie tylko IP.

Czy playwright-stealth Wystarczy na strony chronione przed chmurami?

W przypadku stron z aktywnym Cloudflare Bot Management lub jakichkolwiek umiarkowanie niedawno rozwiązania bot przedsiębiorstwa, zazwyczaj nie - i niezawodność degraduje się w ciągu miesięcy, jak Cloudflare modeli aktualizacji. Do produkcji przepływów pracy, gdzie wiarygodność ma znaczenie, plugin- poziom stealth ma znany sufit.

A co z programem Cloudflare "Zweryfikowany Bot" - czy powinienem po prostu zarejestrować mojego bota?

Jeśli Twój przypadek zastosowania kwalifikuje (przeszukujące się czołgi, usługi monitoringu, narzędzia dostępności), Program Cloudflare 's Verified Bots jest legalną ścieżką i właściwą odpowiedzią. Większość czynników automatyzacji i AI nie kwalifikuje się do zweryfikowania statusu bot, a niezweryfikowana automatyzacja musi obsługiwać wykrywanie na własnych zasługach.

Czy to podejście będzie działać przeciwko innym sprzedawcom antybotów (DataDome, Akamai, PerimeterX)?

Te same zasady mają zastosowanie: im bardziej spójna tożsamość na poziomie binarnym, tym mniej łatwe systemy wykrywania mogą oznaczyć sesję jako automatyzację. Specyficzne sygnały, które każdy sprzedawca waży inaczej - DataDome mocno opiera się na wzorcach behawioralnych, Akamai na TLS, PerimeterX na mieszance - ale spójność tożsamości na poziomie equity jest strukturalną odpowiedzią na wszystkie z nich.

Wniosek

Wzór jest spójny: Playwright + stock Chromium produkuje wykrywalne sygnały, łaty na poziomie konkursowym adresują niektóre sygnały, stając się wykrywalne, a jedyną trwałą odpowiedzią jest spójność tożsamości wewnątrz przeglądarki binarnej plus proxy egress, który pasuje.

Jeśli skrypt jest blokowany przez Cloudflare, zmiana najwyższej dźwigni przesuwa się z "bolt stealth na Chromium" do "use a Chromium build where stealth is the default and the proxy is bowed to a spójną profil". To jest strukturalna fix, a to jest różnica pomiędzy skryptami, które działają przez dwa tygodnie i skryptami, które działają przez dwa lata.

Clawbrowser jest zbudowany dla dokładnie tej warstwy. Mówi standardowym CDP, więc istniejący skrypt Playwright zmienia się o jedną linię - a przeglądarka obsługuje odcisk palca, powiązanie proxy i spójność tożsamości, które nie może dopasować się do podejścia opartego na wtyczkach.

Czytaj dalej

Zobacz wszystkie →