← Zurück zum Blog

Proxys für Scrapling, Botasaurus und nodriver: Anti-Bot-Einstellungen 2024

Wir behandeln die Proxy-Einstellungen in neuen Frameworks für das Scraping – Scrapling, Botasaurus und nodriver. Code, Beispiele für Rotation, Empfehlungen zur Auswahl von IPs zum Umgehen von Bot-Schutz.

📅21. Oktober 2026

Klassische Kombinationen von Selenium und Puppeteer stoßen immer häufiger auf Anti-Bot-Systeme wie Cloudflare, DataDome und PerimeterX. Neue Frameworks — Scrapling, Botasaurus und nodriver — kommen auf, die von Anfang an auf die Umgehung von Erkennung ausgelegt sind. Doch selbst das fortschrittlichste Framework ist nutzlos ohne richtig konfigurierte Proxys. In diesem Artikel werden wir untersuchen, wie man Proxys in jedem der drei Tools einrichtet, welche Fehler die Effizienz beeinträchtigen und wie man den IP-Typ für eine bestimmte Parsing-Aufgabe auswählt.

Wie sich Scrapling, Botasaurus und nodriver von Selenium unterscheiden

Alle drei Frameworks entstanden als Antwort darauf, dass Selenium und der gewöhnliche Puppeteer zu leicht erkennbar wurden. Anti-Bot-Systeme überprüfen Dutzende von Parametern: CDP-Protokoll, navigator.webdriver, Canvas-Rendering, Ereignis-Timings — und klassische Treiber hinterlassen in fast jedem dieser Punkte charakteristische Spuren.

Scrapling — eine Python-Bibliothek, die adaptives HTML-Parsen mit der Möglichkeit zur Emulation eines Browsers über StealthyFetcher auf Basis von Camoufox (ein Fork von Firefox mit gepatchtem Fingerprint) kombiniert. Sie ist gut für Aufgaben, bei denen schnelles Parsen mit minimalem Ressourcenverbrauch erforderlich ist, während die Website aktiv den TLS-Fingerprint überprüft.

Botasaurus — ein Framework auf Basis eines modifizierten Chromium (undetected-chromedriver im Hintergrund), das für massives paralleles Scraping mit automatisierter Verwaltung von Browserprofilen und integrierter Unterstützung zur Lösung von Captchas über Drittanbieterdienste optimiert ist.

nodriver — der Nachfolger von undetected-chromedriver vom selben Autor, der ganz auf Selenium WebDriver verzichtet und direkt über CDP (Chrome DevTools Protocol) arbeitet, was einen erheblichen Teil der erkennbaren Automatisierungsartefakte beseitigt.

Eine gemeinsame Eigenschaft aller drei ist, dass sie die Erkennung auf der Ebene des Browser-Fingerprints reduzieren, aber das Problem der IP-Reputation nicht lösen. Wenn Anfragen von einer Rechenzentrums-IP ausgehen, die bereits in den Blacklists von DataDome oder Cloudflare aufgeführt ist, wird kein Patch des Browsers vor Captchas oder 403-Fehlern schützen.

Proxy-Einrichtung in Scrapling

Scrapling unterstützt Proxys sowohl im schnellen HTTP-Modus (Fetcher) als auch im Browser-Modus (StealthyFetcher). Für statisches Parsen ohne JS-Rendering wird der Proxy direkt in den Anfrageparametern übergeben:

from scrapling.fetchers import Fetcher

response = Fetcher.get(
    "https://example.com",
    proxy="http://user:[email protected]:9000"
)
print(response.status)

Für den Modus mit vollem Browser (StealthyFetcher auf Camoufox) wird der Proxy über ein Dictionary mit separaten Feldern für Server, Benutzername und Passwort übergeben — das ist wichtig, da Camoufox die Proxy-Authentifizierung anders behandelt als das gewöhnliche Chromium:

from scrapling.fetchers import StealthyFetcher

response = StealthyFetcher.fetch(
    "https://example.com",
    proxy={
        "server": "gate.proxycove.com:9000",
        "username": "user",
        "password": "pass"
    },
    headless=True
)
print(response.status)

Ein häufiger Fehler ist, den Proxy als gesamte Zeichenkette im Browser-Modus zu übergeben, wie in HTTP-Anfragen. Camoufox ignoriert in diesem Fall entweder die Authentifizierung oder schlägt mit einem Timeout beim Verbindungsaufbau zum Proxy-Server fehl. Wenn Sie den Fehler ERR_NO_SUPPORTED_PROXIES sehen — überprüfen Sie das Format des Dictionaries mit den separaten Feldern.

Proxy-Einrichtung in Botasaurus

Botasaurus verwendet den Dekorator @browser zur Konfiguration des Treibers, und der Proxy wird als Parameter dieses Dekorators oder direkt in der Startfunktion übergeben:

from botasaurus.browser import browser, Driver

@browser(
    proxy="http://user:[email protected]:9000"
)
def scrape_data(driver: Driver, data):
    driver.get("https://example.com")
    return driver.page_html

scrape_data()

Wenn verschiedene Proxys für jede parallele Aufgabe angeschlossen werden müssen (was bei massivem Scraping über Botasaurus kritisch ist), sollten Proxys besser dynamisch über eine Datensammlung übergeben werden, anstatt sie im Dekorator fest zu codieren:

from botasaurus.browser import browser, Driver

@browser
def scrape_with_proxy(driver: Driver, data):
    driver.config.proxy = data["proxy"]
    driver.get(data["url"])
    return driver.page_html

tasks = [
    {"url": "https://example.com/page1", "proxy": "http://user:pass@ip1:port"},
    {"url": "https://example.com/page2", "proxy": "http://user:pass@ip2:port"},
]
scrape_with_proxy(tasks)

Botasaurus parallelisiert Aufgaben hervorragend über multiprocessing, daher ist es beim massiven Scraping wichtig, Proxys mit einem ausreichenden IP-Pool zu verwenden — andernfalls werden mehrere Threads auf die gleiche Adresse zugreifen, was sofort die Automatisierung durch das Muster der Anfragefrequenz verrät.

Proxy-Einrichtung in nodriver

nodriver arbeitet über eine direkte Verbindung zu CDP ohne Selenium-Schicht, daher wird der Proxy hier über die Startargumente des Browsers konfiguriert, nicht über eine separate API. Für Proxys ohne Authentifizierung ist es ganz einfach:

import nodriver as uc
import asyncio

async def main():
    browser = await uc.start(
        browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
    )
    page = await browser.get("https://example.com")
    await asyncio.sleep(3)
    browser.stop()

asyncio.run(main())

Das Problem ist, dass Chromium keine Login/Passwort-Authentifizierung über --proxy-server direkt unterstützt. Für authentifizierte Proxys in nodriver muss entweder ein lokaler Proxy-Tunnel ohne Authentifizierung eingerichtet werden (zum Beispiel über px oder 3proxy), oder das CDP-Ereignis Fetch.authRequired verarbeitet werden:

import nodriver as uc
import asyncio

async def main():
    browser = await uc.start(
        browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
    )
    page = await browser.get("https://example.com")

    async def auth_handler(event):
        await page.send(uc.cdp.fetch.continue_with_auth(
            request_id=event.request_id,
            auth_challenge_response=uc.cdp.fetch.AuthChallengeResponse(
                response="ProvideCredentials",
                username="user",
                password="pass"
            )
        ))

    page.add_handler(uc.cdp.fetch.AuthRequired, auth_handler)
    await asyncio.sleep(5)
    browser.stop()

asyncio.run(main())

Dies ist der am wenigsten offensichtliche Punkt unter den drei Frameworks — viele Entwickler verbringen Stunden damit, zu verstehen, warum die Authentifizierung einfach nicht funktioniert, ohne über die Fetch-Domain in CDP Bescheid zu wissen.

Proxy-Rotation und Bekämpfung von Anti-Bots

Selbst ein perfekt konfiguriertes Browser-Fingerprint schützt nicht, wenn eine IP mehr als 50-100 Anfragen pro Minute an eine geschützte Domain sendet. DataDome und Cloudflare analysieren die Anfragefrequenz von einer bestimmten Adresse und die zeitlichen Muster zwischen den Aktionen — zu gleichmäßige Intervalle sind ebenfalls verdächtig.

Das funktionierende Rotationsschema für alle drei Frameworks ist identisch:

  1. Verwenden Sie ein Gateway mit automatischer IP-Rotation auf Anbieterebene — es ist nicht notwendig, Ihre eigene Logik zur Adressänderung für jede Anfrage zu schreiben.
  2. Für Sitzungsaufgaben (Login, mehrseitige Navigation) fixieren Sie die IP für die Sitzung über einen Sticky-Parameter in der Verbindungszeichenfolge.
  3. Für einfaches Parsen statischer Seiten rotieren Sie die IP bei jeder Anfrage oder alle 5-10 Anfragen.
  4. Fügen Sie zufällige Verzögerungen zwischen den Anfragen hinzu (1-4 Sekunden) — dies reduziert die Erkennung durch zeitliche Muster.

Beispiel für eine Sticky-Sitzung in der Verbindungszeichenfolge, bei der die session-id die gleiche ausgehende IP für 10 Minuten speichert:

proxy = "http://user-session-abc123:[email protected]:9000"

Für Botasaurus ist ein solches Schema besonders nützlich, da bei parallelem Scraping jeder Prozess seine eigene einzigartige session-id erhalten kann, und Sie einen stabilen Pool verschiedener IPs ohne manuelle Verwaltung der Adressenliste erhalten.

Welchen Proxy-Typ für jedes Framework wählen

Der Proxy-Typ beeinflusst den Erfolg des Parsens nicht weniger als die Wahl des Frameworks. Unten finden Sie einen Vergleich nach Aufgaben:

Aufgabe Empfohlener Proxy-Typ Warum
Parsing von Websites mit Cloudflare/DataDome Residential Proxys Echte IPs von Heimnutzern landen selten auf den Blacklists von Anti-Bots
Massives Parsen ohne strengen Schutz Rechenzentrums-Proxys Höhere Geschwindigkeit, niedrigere Kosten bei großen Anfragevolumina
Emulation eines echten Nutzers auf mobilen Websites Mobile Proxys CGNAT-Adressen von Mobilfunkanbietern haben das höchste Vertrauen bei Anti-Bots

Für Scrapling im StealthyFetcher-Modus bieten Residential Proxys den größten Effekt, da Camoufox bereits das Problem des Browser-Fingerprints löst — es bleibt nur, sich nicht durch die IP zu verraten. Für Botasaurus bei massivem parallelem Scraping sind Rechenzentrums-Proxys oft optimal im Verhältnis von Geschwindigkeit zu Preis, wenn die Ziel-Website keinen fortschrittlichen Schutz auf DataDome-Niveau verwendet.

Typische Fehler bei der Verbindung von Proxys und Browserautomatisierung

In der Praxis sind die meisten Parsing-Fehler nicht auf das Framework selbst zurückzuführen, sondern auf eine falsche Konfiguration der Proxys. Hier ist eine Liste von Fehlern, die am häufigsten auftreten:

  • Die gleiche IP für alle parallelen Threads von Botasaurus. Anti-Bot sieht 20 gleichzeitige Sitzungen von einer Adresse und blockiert sie innerhalb von Minuten.
  • Übertragung des Proxys als Zeichenkette im Browser-Modus von Scrapling. Camoufox benötigt ein Dictionary mit getrennten Feldern — andernfalls wird die Authentifizierung nicht durchgeführt.
  • Ignorieren der CDP Fetch-Domain in nodriver. Ohne den Handler authRequired wird der authentifizierte Proxy einfach nicht verbunden, der Browser hängt beim Laden.
  • Fehlende Rotation bei Sitzungsaktionen. Ein IP-Wechsel mitten in einer autorisierten Sitzung verrät sofort die Automatisierung — verwenden Sie Sticky-Sitzungen.
  • Unstimmigkeit zwischen der Geolokalisierung des Proxys und der Sprache des Browsers. IPs aus Deutschland mit Accept-Language: ru-Header sind ein klassisches Zeichen für einen Bot für Betrugsbewertungssysteme.
  • Zu aggressive Anfragefrequenz selbst mit Rotation. IP-Rotation hebt nicht die Notwendigkeit auf, Pausen zwischen Anfragen einzulegen — das Verhaltensmuster wird ebenfalls analysiert.

Es ist wichtig, DNS-Lecks bei der Arbeit mit Proxys im Browser-Modus zu überprüfen — manchmal löst der Browser Domains über das systemeigene DNS auf und nicht über den Proxy-Tunnel, was zu einer Asynchronität zwischen der IP der Anfrage und der IP der Auflösung führt, die leicht von Sicherheitssystemen erfasst werden kann.

Fazit

Scrapling, Botasaurus und nodriver lösen das Problem der Erkennung auf der Ebene des Browser-Fingerprints viel besser als das klassische Selenium, aber keines von ihnen mindert die Bedeutung eines qualitativ hochwertigen Proxys. Die richtige Konfiguration der Authentifizierung (insbesondere in nodriver über CDP), eine durchdachte IP-Rotation und die Wahl des geeigneten Proxy-Typs für ein bestimmtes Anti-Bot-System — drei Faktoren, die die Stabilität des Parsings auf lange Sicht bestimmen.

Wenn Sie Websites mit fortschrittlichem Schutz wie Cloudflare oder DataDome scrapen, beginnen Sie mit Residential Proxys — sie bieten den höchsten Prozentsatz erfolgreicher Anfragen aufgrund der IP-Reputation. Für massive Aufgaben ohne strengen Schutz bleiben Rechenzentrums-Proxys die optimale Wahl im Verhältnis von Geschwindigkeit und Kosten bei großen Volumina.