Scraper działa przy pierwszym uruchomieniu. Przy trzecim dostajesz 403, pustą odpowiedź albo pętlę CAPTCHA. Kod się nie zmienił. Strona też nie. Anti-bot zbudował profil sesji i zaczął ją blokować.
TL;DR: blokady zwykle wynikają z czterech warstw: sieci, tożsamości browsera, zachowania i stanu sesji. Zacznij od anti-detect browsera z fingerprints i proxy routing na poziomie engine; kod zostaw do rozpoznania, ekstrakcji, paginacji i skali.
Pełny model czterech warstw opisuje Automatyzacja browsera bez blokad: 4-warstwowy stack obrony.
Recon zanim napiszesz kod
Pisanie scrapera od razu często kończy się przepisywaniem. Dziesięć minut rozpoznania pomaga dobrać właściwy stack.
Rozpoznaj system anti-bot
Otwórz DevTools i sprawdź response headers.
| Header | System anti-bot |
|---|---|
cf-ray, server: cloudflare |
Cloudflare Bot Management |
x-akamai-transformed |
Akamai Bot Manager |
x-datadome |
DataDome |
x-px-* headers |
PerimeterX (now HUMAN) |
| Brak tych headerów | Prawdopodobnie brak komercyjnego anti-bota albo własne rozwiązanie |
Prostą stronę obsłuży curl_cffi; Cloudflare wymaga realnego browsera ze spójnymi fingerprints.
Sprawdź, czy istnieje API
Zanim uruchomisz browser, sprawdź Network i filtr XHR/Fetch. Wiele stron pobiera dane z endpointów JSON.
# If the site loads product data from an API endpoint
from curl_cffi import requests
response = requests.get(
"https://target-site.com/api/v2/products?category=electronics&page=1",Endpointy są szybkie, ale chronione strony mogą wymagać wcześniejszej sesji browsera. Wtedy załaduj stronę i przechwyć odpowiedź.
Oceń model renderowania
Wyłącz JavaScript. Jeśli treść zostaje, HTTP wystarczy. Jeśli znika, potrzebujesz engine browsera.
| Treść widoczna bez JS? | Narzędzie |
|---|---|
| Tak, wszystko się renderuje | curl_cffi or requests with TLS impersonation |
| Częściowo | curl_cffi for static parts, browser for dynamic |
| Nie, pusta strona | Full browser (Clawbrowser + Playwright/Puppeteer) |
Wybór stacku do scrapingu
Narzędzie zależy od ochrony i renderowania. Pełny browser marnuje zasoby, gdy HTTP wystarczy; HTTP przegrywa na chronionej SPA.
Drzewo decyzyjne
Brak anti-bota + HTML z serwera: użyj curl_cffi z TLS impersonation.
from curl_cffi import requests
response = requests.get(
"https://unprotected-site.com/products",
impersonate="chrome136"Brak anti-bota + JavaScript-rendered: użyj zwykłego headless browsera.
Anti-bot + HTML z serwera: użyj curl_cffi z residential proxy.
Anti-bot + JavaScript-rendered: użyj Clawbrowser z managed fingerprints i residential proxy.
from playwright.async_api import async_playwright
async def scrape_protected_site():
async with async_playwright() as p:
# Clawbrowser handles fingerprints, TLS and proxy at the engine levelClawbrowser to lokalny, darmowy anti-detect browser na Chromium, z managed fingerprints, proxy routing, natywnym CDP i wbudowanym MCP server.
Wzorce ekstrakcji danych
Po przejściu anti-bota zaczyna się właściwy scraping: stabilna ekstrakcja strukturalnych danych.
Paginacja
Najczęściej spotkasz trzy typy paginacji.
Paginacja w URL
async def scrape_paginated(page, base_url, max_pages=50):
all_items = []
for page_num in range(1, max_pages + 1):
await page.goto(f"{base_url}?page={page_num}")
await human_delay(2000, 4000)Infinite scroll (ładowanie przy scrollu):
async def scrape_infinite_scroll(page, max_scrolls=30):
all_items = []
previous_count = 0
for _ in range(max_scrolls):"Load more" button:
async def scrape_load_more(page):
while True:
load_more = await page.query_selector('[data-testid="load-more"]')
if not load_more:
breakObsługa dynamicznej treści
Część danych pojawia się dopiero po kliknięciu, rozwinięciu sekcji albo hover.
async def extract_product_details(page, product_url):
await page.goto(product_url)
await human_delay(1000, 2000)
# Click "Specifications" tab to reveal hidden dataEkstrakcja z shadow DOM
Komponenty w shadow DOM wymagają wejścia przez shadow root.
# Pierce through shadow DOM to extract data
data = await page.evaluate("""
() => {
const host = document.querySelector('product-card');
const shadow = host.shadowRoot;Zarządzanie sesjami w scrapingu
Scraper odwiedza dużo więcej stron niż człowiek. Sesja musi wyglądać konsekwentnie.
Session warming
Nie zaczynaj od celu: home, kategoria, cookies, potem scraping. Warstwę zachowania opisuje Automatyzacja browsera bez blokad: 4-warstwowy stack obrony.
async def warm_session(page, site_url):
await page.goto(site_url)
await human_delay(2000, 4000)
# Accept cookies if banner appearsRotacja profili w skali
Rozdziel wolumen między profile Clawbrowser, każdy z własnym fingerprint, cookies, storage i proxy.
import asyncio
from playwright.async_api import async_playwright
async def scrape_batch(profile_name, urls):
async with async_playwright() as p:| Skala | Podejście |
|---|---|
| < 100 pages/day | Single profile, residential proxy, 3-5s delays |
| 100-1,000 pages/day | 3-5 rotating profiles, sticky residential sessions |
| 1,000-10,000 pages/day | 10+ profiles, proxy pool, session warming |
| 10,000+ pages/day | Distributed setup, multiple Clawbrowser instances, backoff logic |
Diagnozowanie blokad
Objaw zwykle pokazuje, która warstwa pęka.
| Objaw | Prawdopodobna przyczyna | Naprawa |
|---|---|---|
| Blokada przy pierwszym request | Reputacja IP lub browser fingerprint | Przejdź na residential proxy i anti-detect browser |
| Blokada po 5-10 stronach | Zachowanie albo limit sesji | Zwolnij, dodaj delays, rozgrzej sesje |
| CAPTCHA on every page | Fingerprint leak | Browser is leaking automation signals, switch to managed fingerprints |
| 403 after proxy rotation | Browser fingerprint unchanged | New IP but same broken fingerprint, fix the browser layer |
| Działa lokalnie, pada w produkcji | Datacenter IP | Dodaj residential proxy w produkcji |
| Pusta strona / spinner bez końca | JavaScript challenge failed | Browser can't pass Cloudflare/Akamai JS check, needs real engine |
| Dane inne niż przy ręcznej wizycie | Geo or locale mismatch | Proxy location doesn't match fingerprint timezone/language |
Szybki skrypt diagnostyczny
import asyncio
from playwright.async_api import async_playwright
async def diagnose_blocking(target_url):
async with async_playwright() as p:Scraping stron chronionych przez Cloudflare
Cloudflare łączy TLS, JavaScript, zachowanie i reputację IP.
Co sprawdza Cloudflare
- TLS fingerprint (JA3/JA4): niespójny ClientHello dostaje challenge przed HTML.
- JavaScript execution: Turnstile wymaga prawdziwego środowiska renderowania.
- IP reputation: reputacja IP jest liczona przez miliony stron.
- Request patterns: powtarzalne requesty z tej samej sesji są flagowane.
Workflow
Wyczyść wszystkie warstwy naraz: anti-detect browser dla TLS/JS, residential proxy dla IP, timing w kodzie.
async def scrape_cloudflare_site(target_url, profile="cf-scraper"):
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp(
f"http://127.0.0.1:9222?profile={profile}"
)Szczegóły Cloudflare opisuje dlaczego skrypty Playwright blokują się na Cloudflare.
Scraping z agentami AI
MCP server Clawbrowser pozwala agentom AI sterować realnymi sesjami przez CDP, z tymi samymi fingerprints i proxy.
Pełna integracja jest w CDP browser dla agentów AI: poradnik dla developerów.
FAQ
Dlaczego scraper działa lokalnie, a w produkcji nie?
Lokalnie masz zwykle residential IP. Produkcja to datacenter IP. Dodaj residential proxy i sprawdź managed fingerprints.
Użyć klienta HTTP czy browsera?
HTTP wystarczy dla HTML z serwera bez anti-bota. Przy JavaScript rendering albo challenge użyj pełnego browsera.
Jak rozpoznać Cloudflare?
Szukaj cf-ray lub server: cloudflare w response headers w DevTools.
Czy da się scrapować bez proxies?
Na niechronionych stronach tak. Za Cloudflare lub Akamai, szczególnie w skali, zwykle potrzebujesz residential proxies.
Zacznij web scraping bez wykrycia
Stabilny scraping zaczyna się od recon, właściwego narzędzia i czystej infrastruktury browsera.
Install Clawbrowser żeby obsłużyć tożsamość browsera i sieć: skopiuj prompt z clawbrowser.ai i wklej go do agenta AI. Setup trwa mniej niż dwie minuty.
Model detekcji opisuje Automatyzacja browsera bez blokad: 4-warstwowy stack obrony. Szczegóły fingerprinting znajdziesz w Browser fingerprinting: 20+ sygnałów używanych przez systemy anti-bot.
Continue exploring
Ask AI how Clawbrowser helps
Czytaj dalej
Powiązane artykuły

Automatyzacja przeglądarki bez blokad: 4 warstwy obrony
Dlaczego automatyzacja przeglądarki jest blokowana i jak to naprawić na każdej warstwie: tożsamość przeglądarki, sieć, zachowanie i zarządzanie sesją. Strukturalny przewodnik dla developerów.
Czytaj artykuł →
Puppeteer-Extra-Stealth jest przestarzały: czego używa nowoczesna automatyzacja
puppeteer-extra-plugin-stealth nie był aktualizowany od 2023 roku. Dlaczego nie radzi sobie z nowoczesnymi systemami Anti-Bot i co warto wybrać zamiast niego.
Czytaj artykuł →