Web scraping bez wykrycia: ilustrowana okładka artykułu Clawbrowser

Web scraping bez wykrycia: techniki, które nadal działają

Clawbrowser Teamweb-scrapinganti-botfingerprintingproxyporadnik

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 level

Clawbrowser 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:
            break

Obsł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 data

Ekstrakcja 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 appears

Rotacja 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

  1. TLS fingerprint (JA3/JA4): niespójny ClientHello dostaje challenge przed HTML.
  2. JavaScript execution: Turnstile wymaga prawdziwego środowiska renderowania.
  3. IP reputation: reputacja IP jest liczona przez miliony stron.
  4. 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

Zobacz wszystkie →