Scraping

Wann brauchst du wirklich einen Headless-Browser zum Scrapen?

Ein Headless-Browser ist die teuerste Art, eine Seite abzurufen. Die meisten Websites brauchen keinen. So entscheidest du zwischen einfachem HTTP und einem vollen Browser.

Chris Collins

Chris Collins

20. August 2026 · 7 Min. Lesezeit

Der Reflex, wenn ein Scraping-Job startet, ist, zu einem Headless-Browser zu greifen. Playwright, Puppeteer oder Selenium können alles laden, was ein echter Browser kann, also fühlt es sich wie die sichere Standardwahl an. Aber ein Headless-Browser ist die teuerste Art, die es gibt, eine Seite abzurufen. Er verbrennt CPU und Speicher, er lädt die ganze Seite und jedes daran angehängte Asset herunter, und er ist langsam, was begrenzt, wie viele Seiten du pro Worker sammeln kannst. Oft zahlst du all das, um ein paar Felder zu extrahieren, die die ganze Zeit im Klartext dastanden. Die eigentliche Frage ist nie “Browser oder nicht” als Gewohnheit, sie ist, was die konkrete Seite tatsächlich verlangt. So entscheidest du.

Was ein Headless-Browser dir wirklich bringt

Ein Headless-Browser ist eine echte Browser-Engine ohne sichtbares Fenster. Er führt das JavaScript der Seite aus, baut das DOM, führt die Hintergrund-fetch- und XHR-Aufrufe aus, die moderne Seiten machen, rendert clientseitigen Inhalt, und lässt dich mit dem Ergebnis interagieren, durch Klicken, Scrollen und Tippen. Er präsentiert auch einen vollen, realistischen Browser-Fingerabdruck und TLS-Handshake, weil er tatsächlich ein Browser ist. Das ist viel Fähigkeit. Der Haken ist, dass jedes Stück davon etwas kostet, und die meisten Seiten das meiste davon nicht brauchen.

Wann einfaches HTTP reicht, was öfter der Fall ist, als du denkst

Bevor du einen Browser automatisierst, schau, woraus die Seite wirklich besteht. In einem großen Teil der Fälle ist ein einfacher HTTP-Client wie Pythons requests oder httpx alles, was du brauchst.

Der erste Fall ist serverseitig gerendertes HTML. Wenn die gewünschten Daten in der ursprünglichen HTML-Antwort vorhanden sind, sieh dir den Seitenquelltext an oder mache ein curl auf die URL, und du wirst sie direkt dort sehen, dann fügt ein Browser nichts als Overhead hinzu. Der zweite, und der, den die Leute am meisten übersehen, ist eine zugrunde liegende JSON-API. Moderne Seiten rendern sehr oft aus einem Backend-Endpunkt, den die Seite selbst aufruft, und wenn du das Netzwerk-Panel öffnest und die XHR-Anfragen beobachtest, wirst du häufig eine saubere JSON-Antwort mit genau den gewünschten Daten finden, ohne HTML-Parsing. Diesen Endpunkt direkt mit HTTP aufzurufen ist schneller, stabiler und leichter zu parsen als die Seite zu rendern, die ihn verbraucht. Der dritte Fall sind statische oder leicht dynamische Seiten, bei denen nichts Wichtiges vom clientseitigen Scripting abhängt.

Dieser Weg ist nicht nur einfacher, er ist dramatisch billiger. Eine HTTP-Anfrage zieht die Bytes, die du angefragt hast, und nichts weiter, also ist sie schnell, parallelisiert gut, und bewegt einen Bruchteil der Daten durch deine Proxys. Dieser letzte Punkt zählt direkt für die Kosten: die allgemeinen Client-Muster stehen in der Anleitung zum Nutzen von Residential-Proxys mit Python, und auf dem HTTP-Weg zu bleiben ist einer der größten Hebel, um Proxy-Bandbreite zu senken und die Latenz niedrig zu halten.

Wann du wirklich einen Browser brauchst

Manche Seiten verlangen tatsächlich einen, und HTTP gegen sie zu erzwingen ist seine eigene Zeitverschwendung. Greife zu einem Headless-Browser, wenn die Daten erst existieren, nachdem JavaScript läuft, eine Single-Page-App, die ihren Inhalt clientseitig rendert, ohne zugängliche API dahinter. Greife zu einem, wenn die Daten durch Interaktion zusammengesetzt werden, das Infinite Scroll und lazy geladene Pagination, das nur mehr holt, während du scrollst oder klickst. Greife zu einem, wenn ein Login oder mehrstufiger Ablauf von clientseitigem Scripting abhängt, um eine nutzbare Session herzustellen. Und greife zu einem, wenn eine Website aktiv einen echten Browser-Kontext prüft, JavaScript-Challenges ausführt oder browser-eigene Signale inspiziert, die ein nackter HTTP-Client nicht erfüllen kann. In diesen Fällen ist der Browser kein Overhead, er ist das einzige Werkzeug, das die Daten bekommt.

Die Kosten des Browser-Wegs, klar benannt

Wenn du einen Browser nutzt, wisse, was du ausgibst. Die größte versteckte Kosten ist die Bandbreite. Ein Browser lädt die ganze Seite so, wie es die einer Person täte, das HTML plus jedes Bild, Stylesheet, jede Schrift, jeden Tracker und jedes Drittanbieter-Skript, was ein Vielfaches der Größe des einen HTML-Dokuments oder JSON-Blobs sein kann, den du eigentlich wolltest. Jedes dieser Bytes reist durch deinen Proxy. Der Fix ist, die Ressourcentypen zu blockieren, die du nicht brauchst, Bilder, Medien, Schriften und Analytik, sodass der Browser genug rendert, um deine Daten zu erzeugen, ohne die ganze Seite herunterzuladen, was die Proxy-Bandbreite auf dem Browser-Weg erheblich senken kann. Die zweite Kosten ist Geschwindigkeit: Rendern ist langsam, also sammelt ein Browser-Worker weit weniger Seiten pro Minute als ein HTTP-Worker, und Browser sind speicherhungrig, also ist das Skalieren einer Flotte davon schwerere Infrastruktur als HTTP-Anfragen abzufeuern. Die dritte Kosten ist für viele Teams eine Überraschung, nämlich dass ein Headless-Browser nicht automatisch unauffälliger ist. Von Haus aus trägt er seine eigenen erkennbaren Verräter, also kann ein naives Headless-Setup leichter zu markieren sein als eine wohlgeformte HTTP-Anfrage, nicht schwerer.

Der Mittelweg, den die meisten überspringen

Sehr viele “Ich brauche einen Browser”-Situationen sind in Wirklichkeit “Ich brauche eine Anfrage, die echt aussieht”. Bevor du zum vollen Rendern eskalierst, versuche einfaches HTTP mit einem korrekten, konsistenten Fingerabdruck: vollständige und kohärente Header, ordentliches Cookie-Handling, und ein passender TLS- und HTTP/2-Fingerabdruck, denn eine Anfrage, die einen browserförmigen Satz von Fingerabdrücken trägt, kommt oft durch, wo ein nackter Client blockiert wird. Kombiniere das mit der allgemeinen Disziplin des Vermeidens von Blockaden, und viele Seiten, die einen Browser zu verlangen schienen, geben einer wohlgeformten HTTP-Anfrage zu einem Bruchteil der Kosten nach. Eskaliere zu einem Browser nur, wenn die Daten wirklich auf keine andere Weise kommen.

Proxys braucht man so oder so

HTTP statt eines Browsers zu wählen ändert nichts an deinem Bedarf an einer sauberen Netzwerkidentität, beide Wege laufen durch Residential-IPs, um wie gewöhnliche Besucher auszusehen. Was sich ändert, ist, wie viel du dafür zahlst. Ein Browser drückt ein Vielfaches an Daten pro Seite durch den Proxy, also hat auf gemessener Residential-Bandbreite das Werkzeug, das du wählst, eine direkte Wirkung auf die Kosten. Die Residential-Proxys und ihre Abrechnung pro GB sind unter beiden Ansätzen dieselben, was genau der Grund ist, warum es die Disziplin wert ist, zum leichteren Werkzeug zu greifen, wenn es funktioniert.

Ein kurzer Entscheidungsfluss

Führe jedes Ziel durch dieselbe schnelle Prüfung, bevor du eine Zeile Automatisierung schreibst.

  1. Sind die Daten im ursprünglichen HTML? Nutze HTTP.
  2. Ruft die Seite einen JSON- oder XHR-Endpunkt auf, der die Daten zurückgibt? Rufe diesen Endpunkt mit HTTP auf.
  3. Erscheint der Inhalt erst, nachdem JavaScript läuft, ohne zugängliche API? Nutze einen Headless-Browser.
  4. Laden die Daten nur durch Scrollen oder Klicken? Nutze einen Headless-Browser.
  5. Bist du blockiert, obwohl du den richtigen Datenweg hast? Repariere zuerst den Fingerabdruck und die IP, dann erwäge einen Browser als letztes Mittel.

In der Praxis beantwortet ein schneller Blick auf den Quelltext und das Netzwerk-Panel die ersten beiden, bevor du dich auf irgendetwas festlegst, und die ersten beiden decken mehr Seiten ab, als die meisten erwarten. Wenn du rendern musst, halte es schlank:

# HTTP first: hit the underlying JSON endpoint the page already calls
import requests
PROXY = "http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443"
proxies = {"http": PROXY, "https": PROXY}
r = requests.get("https://shop.example.com/api/products?page=1",
proxies=proxies, timeout=15)
r.raise_for_status()
data = r.json() # structured data, no rendering, minimal bytes
# Only if rendering is truly required, run a browser through the same
# proxy and block heavy resource types so it does not pull the whole page:
# route.abort() on image / media / font / stylesheet requests
# before reading the rendered content.

Fazit

Ein Headless-Browser ist das richtige Werkzeug für clientseitiges Rendern und echte Interaktion, und das falsche Werkzeug für alles andere, was der Großteil des Webs ist. Prüfe, ob die Daten im HTML oder hinter einem JSON-Endpunkt sind, bevor du irgendetwas automatisierst, bevorzuge eine wohlgeformte HTTP-Anfrage mit einem echten Fingerabdruck vor dem Hochfahren eines Browsers, und wenn du renderst, blockiere, was du nicht brauchst, damit du nicht dafür zahlst, eine ganze Seite für eine Handvoll Felder herunterzuladen. Beide Wege brauchen Residential-IPs, aber nur einer von ihnen schickt für jeden Datensatz eine ganze Seite durch den Proxy. Greife zuletzt zum Browser, nicht zuerst, und das billigste Werkzeug, das die Daten zuverlässig bekommt, ist das, das du nutzen solltest.

Diese Netzwerkschicht ist das, was Residential-Proxys bereitstellen, ein großer Pool echter IPs auf Haushaltsebene, der gleich funktioniert, ob du mit einfachem HTTP abrufst oder einen vollen Browser steuerst. Die Abrechnung pro GB ist der Grund, warum sich der leichtere Weg auszahlt: du bewegst nur die Daten, die du wirklich brauchst, über so viele Ziele, wie der Job verlangt.

Bereit, loszulegen?

Testen Sie Shifters Residential-Proxys, 205M+ IPs, 195+ Länder, ab $0.75/GB.

Jetzt starten