AX/G/006

Anti-bot detection: co robi Cloudflare i jak działa Playwright

Przewodnik dla nie-developerów. Jak strony wykrywają boty, czego używają największe systemy, dlaczego "po prostu dodaj user-agent" już dawno nie działa.

Kiedyś scraping wystarczał "pobierz URL przez curl, dodaj User-Agent: Mozilla/5.0". W 2026 to działa może na 10% stron komercyjnych. Reszta ma anti-bot system który widzi twojego bota w 200ms. Ten przewodnik tłumaczy dlaczego.

Anti-bot detection nie patrzy CZY jesteś botem. Patrzy NA ILE wyglądasz na bota — i wystawia score. Powyżej threshold = block.

4 główni gracze

Większość anti-bot systemów to:

  • Cloudflare Bot Management — domyślny dla 30%+ internetu. Każdy request idzie przez ich edge network, więc widzą wszystko. JS challenge ("Checking your browser…") to ich znak rozpoznawczy.
  • Akamai Bot Manager — używany przez większość Fortune 500 (banki, telekomy, retail premium). Bardziej agresywny niż Cloudflare, częściej hard-bansuje.
  • Datadome — francuski gracz, popularny w EU. Specjalizacja: e-commerce i ticketing.
  • PerimeterX (HUMAN) — używany w sektorze sneakers, drops, gaming. Najtrudniejszy do obejścia.

Plus mniejsze: Imperva (Incapsula), Kasada, F5 Shape. Wszystkie używają podobnych technik, różnią się głównie agresywnością i ceną.

Co konkretnie sprawdzają (40+ sygnałów)

Każdy request niesie setki ujawnień. Anti-bot system patrzy na:

1. Network layer (~10 sygnałów)

  • IP reputation (czy adres jest w blacklistach, czy to datacenter czy ISP)
  • TLS fingerprint (kolejność cipher suites, supported extensions — różni się między curl, Python requests, Chrome)
  • HTTP/2 fingerprint (pseudo-headers order, settings frame values)
  • TCP fingerprint (window size, MSS, options order — OS leak)

2. Browser identification (~15 sygnałów)

  • User-Agent + sec-ch-ua headers (klient header consistency)
  • Headers order (Chrome wysyła w innej kolejności niż Python)
  • Headers presence (sec-fetch-dest, sec-fetch-mode — bardzo trudno fake'ować)
  • Accept-Language / Accept-Encoding details

3. JavaScript fingerprinting (~20 sygnałów)

  • Canvas fingerprint — narysuj pixel pattern, hashuj rezultat. Różny per device.
  • WebGL fingerprint — GPU vendor + renderer + supported extensions.
  • Audio fingerprint — generuj sinusoidę, hashuj output.
  • Fonts enumeration — jakie fonty są zainstalowane.
  • Plugins / MimeTypes — wymierające ale wciąż używane.
  • Screen resolution + colorDepth + pixelRatio
  • Timezone + Intl.DateTimeFormat consistency vs IP geolocation.

4. Behavioral (~10 sygnałów)

  • Mouse movement curves (humans = bezier-like, bots = linear)
  • Typing rhythm na formularzach
  • Scroll velocity i acceleration
  • Time between page load and first interaction (boty = milisekundy, ludzie = sekundy)

Dlaczego curl / requests nie wystarczają

Python requests ma TLS fingerprint który widać z 100m. HTTP/2 nawet nie obsługuje. Pierwsze 3 sygnały = block. Tu nie pomoże User-Agent.

Headless Chrome bez modyfikacji ma navigator.webdriver = true. Inne quirks: brak chrome.runtime, niespójność navigator.plugins.length === 0 przy navigator.platform === "Win32". Wszystko sprawdzane.

Jak Playwright sobie z tym radzi

Playwright vanilla = headless Chrome = wykrywalny. Production scraping używa:

  • playwright-extra + stealth plugin — patchuje 20+ flagów wykrywania headless
  • Real fingerprints rotation — generator legit canvas/WebGL fingerprints
  • Residential proxy pool — IP z prawdziwych ISP, nie datacenter
  • Browser pool sharing — reuse sesji żeby look like returning user
  • CDP-based interaction — mouse moves curve-based, typing speed varied

Plus context — request comes with sensible referer chain, accept-language matches IP geo, sessions live multiple page navigations.

Praktyczne wnioski

Co to znaczy dla biznesu zamawiającego scraping:

  1. "Cloudflare protected" nie znaczy "nie da się" — da się, ale 5-10× drożej niż niezabezpieczona strona.
  2. Datacenter proxy ($1-5/GB) wystarczą tylko dla najsłabszego anti-bot. Większe targety wymagają residential ($5-15/GB).
  3. PerimeterX targets (sneakers, top retail) — czasem economically infeasible dla małych projektów.
  4. Realistic accuracy dla protected sites: 70-95%. Nigdy 100%. Akceptuj retry logic.
  5. ToS violation enforcement rośnie — jeśli scraping jest na granicy legal, oceń ryzyko z prawnikiem.

Sedno

Anti-bot detection w 2026 to wieloletni wyścig zbrojeń. Strony chronią dane, scrapery używają coraz lepszych technik. Production scraping protected targets jest droższe ale możliwe. Jeśli twój dostawca obiecuje "100% accuracy na Cloudflare za $500" — kłamie albo nie rozumie problemu.

Sensowne expectations: 90-98% accuracy, retry logic, 3-15× wyższy infra cost niż niezabezpieczone targety, akceptacja że co kilka miesięcy parser updates są niezbędne. To realne, mierzalne, działa od lat.

Masz podobny problem?

Większość tych technik wdrażamy na produkcję.

Jeśli ten artykuł rezonuje z czymś, co próbujesz rozwiązać — napisz. Wstępna ocena projektu jest bezpłatna.