Ihr Scraper läuft beim ersten Versuch. Beim dritten Durchlauf kommen 403-Fehler, leere Antworten oder endlose CAPTCHA-Schleifen. Der Code ist gleich geblieben. Die Website auch. Geändert hat sich, dass das Anti-Bot-System ein Profil Ihres Scrapers aufgebaut hat und die Session nun blockiert. 2026 prüfen Cloudflare, Akamai und DataDome deutlich mehr Signale; stealth plugins, User-Agent-Rotation und zufällige Pausen reichen allein nicht mehr.
TL;DR: Die meisten Scraping-Blocks entstehen in vier Schichten: Netzwerk, Browser-Identität, Verhalten und Session-State. Patchen Sie diese Schichten nicht einzeln im Scraper. Starten Sie mit einem Browser, der fingerprints und proxies auf Engine-Ebene verwaltet. Danach bleibt Ihr Code bei dem, was wirklich scraping-spezifisch ist: Recon, Datenextraktion, Pagination und Skalierung.
Die Grundlagen dieser vier Schichten stehen in Browser-Automatisierung ohne Blockierung: der 4-Schichten-Verteidigungsstack. Dieser Artikel konzentriert sich auf den praktischen Scraping-Workflow: was Sie vor dem Code prüfen, wie Sie Daten extrahieren und wie Sie skalieren.
Recon vor dem Code
Viele Entwickler schreiben sofort den Scraper. Genau so baut man ihn mehrfach neu. Nehmen Sie sich 10 Minuten für Recon, dann wählen Sie den richtigen Ansatz meist beim ersten Mal.
Anti-Bot-System erkennen
Öffnen Sie DevTools auf der Zielseite und prüfen Sie die Response-Header.
| Header | Anti-Bot-System |
|---|---|
cf-ray, server: cloudflare |
Cloudflare Bot Management |
x-akamai-transformed |
Akamai Bot Manager |
x-datadome |
DataDome |
x-px-* headers |
PerimeterX (jetzt HUMAN) |
| Keine davon | Vermutlich kein kommerzielles Anti-Bot-System oder eine Eigenlösung |
Das zeigt, wie schwer der Job wird. Eine ungeschützte Seite lässt sich oft mit curl_cffi oder requests scrapen. Eine Cloudflare-Seite braucht einen echten Browser mit verwalteten fingerprints.
Prüfen, ob es eine API gibt
Bevor Sie einen Browser-Scraper bauen, prüfen Sie, ob die Seite Daten über einen Endpoint lädt. Öffnen Sie den Network-Tab in DevTools, navigieren Sie durch die Seite und filtern Sie nach XHR/Fetch. Viele Websites liefern JSON, das einfacher ist als gerendertes HTML.
# 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",API-Endpoints sind schneller und liefern strukturierte Daten. Manche Anti-Bot-Systeme prüfen aber, ob die API-Requests aus einer echten Browser-Session kommen. Wenn der Server erwartet, dass /api/v2/products erst nach Page-Load und JavaScript-Ausführung aufgerufen wird, kann ein direkter Request erkannt werden. Bei geschützten Seiten ist es stabiler, die Seite in einem echten Browser zu laden, den Client den API-Call ausführen zu lassen und die Antwort abzufangen.
Rendering-Modell einschätzen
Laden Sie die Seite ohne JavaScript (DevTools -> Settings -> Disable JavaScript). Wenn der Content sichtbar bleibt, brauchen Sie keinen Browser. Wenn die Seite leer ist, handelt es sich um eine JavaScript-gerenderte SPA und Sie brauchen eine echte Browser-Engine.
| Content sichtbar ohne JS? | Werkzeug |
|---|---|
| Ja, alles wird gerendert | curl_cffi oder requests mit TLS impersonation |
| Teilweise, Content fehlt | curl_cffi für statische Teile, Browser für dynamische |
| Nein, leere Seite | Voller Browser (Clawbrowser + Playwright/Puppeteer) |
Scraping-Stack auswählen
Das richtige Tool hängt vom Schutzlevel und vom Rendering-Modell ab. Ein voller Browser verschwendet Ressourcen, wenn curl_cffi reicht. Eine HTTP-Library verschwendet Zeit, wenn die Seite eine JS-gerenderte Cloudflare-App ist.
Entscheidungsbaum
Kein Anti-Bot + serverseitig gerendertes HTML: Nutzen Sie curl_cffi mit TLS impersonation. Schnellster Weg, geringste Kosten. Kein Browser nötig.
from curl_cffi import requests
response = requests.get(
"https://unprotected-site.com/products",
impersonate="chrome136"Kein Anti-Bot + JavaScript-rendered: Nutzen Sie einen normalen headless Browser. Fingerprint-Management ist nicht nötig, weil kein Anti-Bot-System prüft.
Anti-Bot + serverseitig gerendertes HTML: Nutzen Sie curl_cffi mit residential proxy. Das Anti-Bot-System prüft TLS fingerprint und IP, führt aber keine JavaScript-Challenges aus.
Anti-Bot + JavaScript-rendered (Cloudflare, Akamai, DataDome): Nutzen Sie einen Browser wie Clawbrowser mit verwalteten fingerprints und residential proxy. Nur dieser Stack deckt alle vier Erkennungsschichten ab.
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 ist ein lokaler, kostenloser, Chromium-basierter anti-detect browser mit verwalteten fingerprints, proxy routing, nativem CDP und eingebautem MCP server. Playwright- oder Puppeteer-Code verbindet sich per CDP wie mit einer normalen Chrome-Instanz.
Muster für Datenextraktion
Nach der Anti-Bot-Schicht beginnt die eigentliche Scraping-Arbeit: strukturierte Daten zuverlässig aus Seiten holen.
Pagination
Die meisten Websites paginieren Ergebnisse. Drei Muster kommen ständig vor, und jedes braucht einen anderen Ansatz.
URL-basierte Pagination (Seitennummer in der 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 (Content lädt beim Scrollen):
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:
breakDynamische Inhalte behandeln
Manche Daten erscheinen erst nach Interaktion: Tabs anklicken, Accordions öffnen oder Elemente hovern.
async def extract_product_details(page, product_url):
await page.goto(product_url)
await human_delay(1000, 2000)
# Click "Specifications" tab to reveal hidden dataAus shadow DOM extrahieren
Moderne Sites kapseln Komponenten häufig im shadow DOM. Normale Selektoren erreichen diese shadow roots nicht.
# Pierce through shadow DOM to extract data
data = await page.evaluate("""
() => {
const host = document.querySelector('product-card');
const shadow = host.shadowRoot;Session-Management für Scraping
Session-Handling unterscheidet Scraping stark von allgemeiner Automatisierung. Ein Scraper besucht hunderte oder tausende Seiten in Mustern, die kein echter Nutzer produziert. Gute Sessions entscheiden, ob der Job fertig wird oder bei Seite 50 endet.
Session warming
Gehen Sie nicht direkt auf die Zielseite. Öffnen Sie zuerst die Homepage, browsen Sie eine Kategorie und akzeptieren Sie das Cookie-Banner. So entsteht Session-Historie, bevor die wirklich wichtigen URLs kommen.
Für die Verhaltensbausteine (zufällige Delays, realistische Mausbewegung und Scroll-Muster) siehe Layer 3 in Browser-Automatisierung ohne Blockierung: der 4-Schichten-Verteidigungsstack. Das Beispiel nutzt diese Helper zum Warm-up:
async def warm_session(page, site_url):
await page.goto(site_url)
await human_delay(2000, 4000)
# Accept cookies if banner appearsProfile bei Skalierung rotieren
Wenn Sie tausende Seiten einer Domain scrapen, verteilen Sie die Arbeit auf mehrere Browser-Profile. Jedes Profil in Clawbrowser hat eigenen fingerprint, cookies, storage und proxy assignment. So sammelt keine einzelne Session verdächtig viel Volumen.
import asyncio
from playwright.async_api import async_playwright
async def scrape_batch(profile_name, urls):
async with async_playwright() as p:| Scraping-Skala | Empfohlener Ansatz |
|---|---|
| < 100 Seiten/Tag | Einzelnes Profil, residential proxy, 3-5s Delays |
| 100-1.000 Seiten/Tag | 3-5 rotierende Profile, sticky residential sessions |
| 1.000-10.000 Seiten/Tag | 10+ Profile, proxy pool, session warming |
| 10.000+ Seiten/Tag | Verteiltes Setup, mehrere Clawbrowser-Instanzen, backoff logic |
Blocks diagnostizieren
Wenn der Scraper blockiert wird, müssen Sie zuerst wissen, welche Schicht die Ursache ist. Unterschiedliche Symptome zeigen auf unterschiedliche Fehler.
| Symptom | Wahrscheinliche Ursache | Fix |
|---|---|---|
| Block beim ersten Request | IP-Reputation oder Browser fingerprint | Auf residential proxy wechseln, anti-detect browser nutzen |
| Läuft 5-10 Seiten, dann Block | Verhaltensdetektion oder Session-Limits | Langsamer werden, Delays ergänzen, Sessions wärmen |
| CAPTCHA auf jeder Seite | Fingerprint leak | Browser leakt Automationssignale; auf verwaltete fingerprints wechseln |
| 403 nach Proxy-Rotation | Browser fingerprint unverändert | Neue IP, aber gleicher kaputter fingerprint; Browser-Schicht fixen |
| Lokal ok, Produktion blockiert | Datacenter-IP | Lokale IP ist residential, Produktion ist datacenter; residential proxy ergänzen |
| Leere Seite / endloser Spinner | JavaScript-Challenge fehlgeschlagen | Browser besteht Cloudflare/Akamai nicht; echte Engine nötig |
| Daten anders als beim manuellen Besuch | Geo- oder Locale-Mismatch | Proxy-Standort passt nicht zu timezone/language im fingerprint |
Schnelles Diagnose-Script
import asyncio
from playwright.async_api import async_playwright
async def diagnose_blocking(target_url):
async with async_playwright() as p:Cloudflare-geschützte Sites scrapen
Cloudflare ist das häufigste Anti-Bot-System. Bot Management prüft TLS fingerprints, führt JavaScript-Challenges (Turnstile) aus, bewertet Verhalten und IP-Reputation gleichzeitig.
Was Cloudflare prüft
- TLS fingerprint (JA3/JA4): Wenn der ClientHello nicht zu einem bekannten Browser passt, kommt die Challenge vor dem HTML.
- JavaScript-Ausführung: Turnstile prüft die Browser-Umgebung und braucht eine echte Rendering-Engine.
- IP-Reputation: Cloudflare führt eine eigene Datenbasis über Millionen Sites.
- Request-Muster: Wiederholte identische Requests aus derselben Session werden schnell markiert.
Der Workflow
Alle Schichten müssen gleichzeitig sauber sein. Ein anti-detect browser übernimmt TLS und JavaScript. Ein residential proxy übernimmt IP. Ihr Code übernimmt Timing.
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}"
)Eine Cloudflare-spezifische Analyse finden Sie in warum Ihre Playwright-Skripte von Cloudflare blockiert werden.
Scraping mit AI Agents
Wenn Sie AI Agents bauen, die das Web scrapen, kann Clawbrowsers MCP server echte Browser-Sessions direkt steuern. Der Agent entscheidet, was gescrapt wird, navigiert Seiten und extrahiert Daten über dieselbe CDP-Schnittstelle. Verwaltete fingerprints und proxy routing funktionieren gleich, egal ob Befehle aus Ihrem Code oder vom Agent kommen.
Die vollständige Integration steht in CDP Browser für AI Agents: ein Developer Guide.
FAQ
Warum funktioniert mein Scraper lokal, aber nicht in Produktion?
Ihre lokale Maschine nutzt eine residential IP Ihres ISP. Der Produktionsserver nutzt meist eine datacenter IP. Anti-Bot-Systeme markieren solche IPs. Ergänzen Sie einen residential proxy in Produktion. Wenn das nicht reicht, prüfen Sie, ob der Browser headed mit verwalteten fingerprints läuft.
Soll ich einen HTTP-Client oder einen Browser verwenden?
Wenn die Zielseite serverseitig rendert und kein Anti-Bot-System hat, nutzen Sie curl_cffi mit TLS impersonation. Wenn die Seite JavaScript-rendered ist oder Anti-Bot-Challenges ausführt, nutzen Sie einen vollen Browser. Deaktivieren Sie JavaScript in DevTools: verschwindet der Content, brauchen Sie einen Browser.
Wie erkenne ich, ob eine Site Cloudflare nutzt?
Prüfen Sie Response-Header wie cf-ray oder server: cloudflare. Öffnen Sie in DevTools den Network-Tab, laden Sie die Seite und suchen Sie nach Cloudflare-Headern. Turnstile-Challenges zeigen oft einen typischen Spinner, bevor Content erscheint.
Kann ich ohne proxies scrapen?
Bei ungeschützten Sites ja. Hinter Cloudflare, Akamai oder ähnlichen Systemen brauchen Sie meist residential proxies, um IP-basierte Blocks zu vermeiden. Die Heim-IP reicht für Tests, wird bei Skalierung aber schnell auffällig.
Mit Web Scraping ohne Erkennung starten
Erfolgreiches Scraping beginnt 2026 vor dem ersten Extraktionscode. Prüfen Sie die Zielseite, wählen Sie das Tool nach Schutzlevel und bauen Sie zuerst die Browser-Infrastruktur.
Installieren Sie Clawbrowser, um Browser-Identität und Netzwerk-Schicht abzudecken: Kopieren Sie den Install-Prompt von clawbrowser.ai und fügen Sie ihn in Ihren AI Agent ein. Das Setup dauert unter zwei Minuten. Danach konzentriert sich Ihr Code auf Recon, Extraktion, Pagination und Session-Management.
Für das zugrunde liegende Detection-Modell siehe Browser-Automatisierung ohne Blockierung: der 4-Schichten-Verteidigungsstack. Details zu fingerprinting stehen in Browser Fingerprinting erklärt: die 20+ Signale von Anti-Bot-Systemen.
Continue exploring
Ask AI how Clawbrowser helps
Weiterlesen
Ähnliche Artikel

Browser-Automatisierung ohne Blockierung: Der 4-Schichten-Verteidigungsstack
Warum Browser-Automatisierung blockiert wird und wie Sie jede Schicht systematisch absichern: Browser-Identität, Netzwerk, Verhalten und Session-Management. Ein Strukturleitfaden für Entwickler.
Artikel lesen →
Puppeteer-Extra-Stealth ist veraltet: Was moderne Automatisierung stattdessen nutzt
puppeteer-extra-plugin-stealth wurde seit 2023 nicht mehr aktualisiert. Warum es gegen moderne Anti-Bot-Systeme versagt und was Sie stattdessen einsetzen sollten.
Artikel lesen →