Deweloperzy korzystający z Playwright do web scrapingu zauważają, że ich pierwsze żądanie jest odrzucane, mimo że skrypt uruchamia pełną instancję Chromium, ustawia autentyczny User-Agent i wprowadza opóźnienia imitujące zachowanie człowieka. Serwer blokuje żądanie podczas uścisku dłoni TLS (TLS handshake), co jest techniką zwaną TLS fingerprinting.
Wyjaśnienie TLS fingerprintingu
Gdy przeglądarka otwiera połączenie HTTPS, wysyła wiadomość ClientHello. Pakiet zawiera wersję TLS, obsługiwane zestawy szyfrów (cipher suites), zestaw rozszerzeń (krzywe eliptyczne, algorytmy podpisów) oraz kilka innych pól. Dokładna kombinacja tych elementów w unikalny sposób identyfikuje stos sieciowy.
Badacze tworzą skróty (hash) tych surowych pól, tworząc kompaktowy identyfikator o nazwie JA3 (lub jego nowszą odmianę JA4). Autentyczna przeglądarka Chrome generuje jeden hash; biblioteka HTTP w Pythonie generuje inny. Jeśli hash po stronie serwera nie zgadza się z deklarowanym User-Agentem, żądanie zostaje oznaczone jako wygenerowane przez skrypt.
Dlaczego standardowa przeglądarka Playwright wciąż może zostać wykryta
Domyślna wersja Chromium w Playwright zazwyczaj emituje poprawny odcisk palca (fingerprint) Chrome, ale wielu twórców scraperów dodaje kroki, które naruszają spójność:
- Mieszane strategie żądań – Deweloperzy często pozwalają Playwright renderować ciężkie strony, podczas gdy lekki klient HTTP pobiera zasoby pomocnicze (JSON, obrazy itp.). Te szybkie wywołania niosą ze sobą odcisk palca biblioteki, a nie Chrome, przez co serwer natychmiast wykrywa niezgodność.
- Proxy terminujące TLS – Niektóre usługi proxy deszyfrują strumień TLS, sprawdzają lub modyfikują ruch, a następnie szyfrują go ponownie. Serwer ostatecznie widzi odcisk palca proxy i może zablokować je jako klienta niebędącego przeglądarką.
- Inne warstwy protokołu – Systemy anty-scrapingowe porównują również ustawienia HTTP/2, kolejność nagłówków oraz reputację IP. Rozbieżność na dowolnym poziomie może spowodować blokadę.
Od JA3 do JA4: wyścig zbrojeń
JA3 był pierwszym szeroko stosowanym fingerprintem TLS. Chrome randomizuje teraz kolejność swoich rozszerzeń przy każdym uruchomieniu, co sprawia, że hash JA3 staje się niestabilny dla prawdziwej przeglądarki. JA4 rozwiązuje ten problem poprzez sortowanie listy rozszerzeń przed wygenerowaniem hasha, co daje stabilny identyfikator nawet wtedy, gdy Chrome zmienia kolejność. Narzędzia detekcyjne wdrażające JA4 mogą niezawodnie odróżnić prawdziwe instancje Chrome od klientów skryptowych, którzy jedynie kopiują statyczny hash JA3.
Co deweloperzy mogą zrobić już dziś
Nie istnieje żaden „magiczny ciąg znaków”, który na zawsze oszuka serwer. Niezawodnym podejściem jest sprawienie, aby każda warstwa żądania opowiadała tę samą historię:
- Dopasuj User-Agent, uścisk dłoni TLS, ustawienia HTTP/2 oraz kolejność nagłówków do tej samej wersji przeglądarki i systemu operacyjnego.
- Przestań mieszać narzędzie do pełnej automatyzacji przeglądarki z osobnym klientem HTTP. Jeśli liczy się szybkość, pozwól Playwright obsługiwać wszystkie wywołania sieciowe, nawet te błahe.
- Wybieraj proxy, które przekazują TLS dalej (pass-through) bez terminowania połączenia, lub skonfiguruj je tak, aby przekazywały oryginalny uścisk dłoni TLS bez zmian.
- Monitoruj usługi reputacji IP; czysta pula adresów IP zmniejsza ryzyko blokady wynikającej z historycznych nadużyć.
Koszt ignorowania spójności fingerprintu
Gdy scraper zostanie zablokowany na etapie uścisku dłoni, nigdy nie dotrze do logiki strony, więc żadne dane nie zostaną zebrane, a czas nie zostanie stracony na wykonywanie JavaScriptu. Przedsiębiorstwa polegające na masowym zbieraniu danych odnotowują wzrost kosztów obliczeń w chmurze, gdy uruchamiane są pętle ponowień (retry loops). Powtarzające się blokady mogą również prowadzić do banów na adresy IP, co wpływa na inny, legalny ruch z tej samej sieci.
Kontrargument: dlaczego witryny stosują TLS fingerprinting
Właściciele witryn postrzegają TLS fingerprinting jako uzasadnioną formę obrony. Zautomatyzowany scraping może przeciążać serwery, omijać paywalle lub masowo zbierać dane osobowe. Sprawdzając, czy fingerprint TLS zgadza się z deklarowaną przeglądarką, witryna odfiltrowuje dużą klasę botów niskiej jakości,
Jeśli Twój scraper Playwright zostaje odrzucony, zanim jakakolwiek strona zostanie załadowana, przyczyną jest niemal na pewno niezgodność odcisku palca TLS (TLS fingerprint). Rozwiązanie nie polega na szybkiej poprawce; wymaga ono rygorystycznego dopasowania każdej warstwy protokołu do zadeklarowanego profilu przeglądarki. Spójność w zakresie User-Agent, handshake'u TLS, ustawień HTTP/2, kolejności nagłówków oraz zachowania proxy to jedyny niezawodny sposób, aby pozostać poza radarem nowoczesnych mechanizmów anty-scrapingowych.
