Um Camoufox mit Residential Proxies zu betreiben, übergeben Sie ein proxy-Dict im Playwright-Format an Camoufox() oder AsyncCamoufox(), setzen geoip=True, damit Zeitzone, Locale und Geolocation aus der Exit-IP abgeleitet werden, und verwenden eine Sticky Session, damit die IP, die Camoufox beim Start ermittelt hat, auch die ist, über die Sie surfen. Camoufox ist ein Firefox-Build, dessen Fingerprint-Patches in C++ stecken, nicht in JavaScript-Overrides. Ihre Aufgabe ist es also vor allem, Netzwerkidentität und Browseridentität konsistent zu halten. Der Rest dieses Leitfadens zeigt den Code, die Prüfungen dahinter und die Fälle, in denen Camoufox das falsche Werkzeug ist.
Was Camoufox ist und warum es zu Residential Proxies passt
Camoufox ist ein Open-Source-Fork von Firefox, gebaut für Scraping und KI-Agenten. Gesteuert wird er über die normale Playwright-API aus Python (das Paket camoufox auf PyPI) oder, seit September 2026, über einen offiziellen npm-Launcher. Laut README werden Daten „auf Ebene der C++-Implementierung abgefangen“. Eine Seite, die navigator, Bildschirm, WebGL oder Schriften untersucht, sieht also native Getter und keine gepatchten JavaScript-Funktionen.
Das ist ein anderer Ansatz als bei den Chromium-Werkzeugen. Patchright ist ein gepatchter Playwright-Treiber, der Chrome selbst unverändert lässt und verhindert, dass der Treiber über das Chrome DevTools Protocol (CDP) erkennbare Dinge tut, etwa Runtime.enable aufzurufen. nodriver verzichtet ganz auf WebDriver und spricht CDP mit einem unveränderten Chrome. Beide lassen ein automatisiertes Chrome wie Chrome aussehen. Camoufox lässt einen automatisierten Firefox wie eine Vielzahl unterschiedlicher Firefox-Installationen aussehen, und Playwright steuert ihn über Juggler, das eigene Automatisierungsprotokoll von Firefox, nicht über CDP. Die Camoufox-Patches geben Juggler eine isolierte Kopie der Seite, sodass die Playwright-Helfer (zum Beispiel window.__playwright__binding__) für Seitenskripte nie sichtbar sind.
Residential Proxies kommen ins Spiel, weil Camoufox die IP nicht verbergen kann. Jeder Start erzeugt eine neue Geräteidentität: Betriebssystem, Bildschirm, GPU, Schriften, Stimmen, Sprache. Wenn diese Identität „Heim-Desktop in Deutschland“ sagt, die Verbindung aber aus einem Rechenzentrumsbereich in Virginia kommt, ist die ganze Fingerprint-Arbeit wertlos. Das README sagt, Camoufox sei „für den Einsatz mit rotierenden Proxies gedacht (vorzugsweise Residential-IPs)“.
Camoufox installieren und den Browser herunterladen
Die Installation hat zwei Schritte: erst das Python-Paket, dann das gepatchte Firefox-Binary, das separat heruntergeladen wird.
pip install -U "camoufox[geoip]"
python -m camoufox fetch
Das Extra [geoip] bringt den geoip2-Reader mit, und Camoufox lädt dazu einen Geolocation-Datensatz herunter. Die Installationsdokumentation nennt es optional, aber „dringend empfohlen, wenn Sie Proxies verwenden“, und geoip=True läuft ohne es nicht. Zwei Versionshinweise, die beim Pinnen von Abhängigkeiten wichtig sind:
- Stand Anfang Oktober 2026 ist das aktuelle stabile Release auf PyPI
camoufox 0.5.6(6. September 2026), gebaut auf Firefox 152. Builds auf Basis von Firefox 156 wurden Ende September als GitHub-Prereleases und0.5.7b*-Betas veröffentlicht. Bleiben Sie bei Stable, sofern Sie keinen bestimmten Fix brauchen. - Das Paket benötigt Python 3.10 oder neuer, und seine
pyproject.tomlpinntplaywright<1.63, weil der Server-Modus ein privates Playwright-Modul importiert. Wenn etwas anderes in Ihrem Projekt das neueste Playwright verlangt, rechnen Sie mit einem Konflikt.
Die Python-API: sync, async und die wichtigen Optionen
Camoufox kapselt den Firefox-Launcher von Playwright. Sobald Sie das Browser-Objekt haben, funktioniert jeder Playwright-Aufruf wie gewohnt. Die synchronen und asynchronen Einstiegspunkte sind Context Manager:
from camoufox.sync_api import Camoufox
with Camoufox(headless=True) as browser:
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
import asyncio
from camoufox.async_api import AsyncCamoufox
async def main():
async with AsyncCamoufox(headless=True) as browser:
page = await browser.new_page()
await page.goto("https://example.com")
print(await page.title())
asyncio.run(main())
Für die Arbeit über Proxies sind diese Keyword-Argumente am wichtigsten. Die Beschreibungen stammen aus der Nutzungsdokumentation und dem Docstring von launch_options() im pythonlib-Quellcode:
proxy: ein Playwright-Proxy-Dict (server,username,password). Beigeoip=Trueschickt Camoufox beim Start außerdem eine Anfrage über diesen Proxy, um die Exit-IP zu ermitteln.geoip:True, um die Exit-IP automatisch nachzuschlagen, oder ein IP-String. Aus dieser IP setzt Camoufox Breiten- und Längengrad, Zeitzone, Land, Locale und die WebRTC-IP.geoip_dbwählt die Datenbank. Am 30. September 2026 hat der main-Branch „GeoIP AIO“ zum Standard gemacht und GeoLite2 als veraltet markiert. Prüfen Sie also, welche Ihre installierte Version nutzt.locale: eine explizite Locale wie"en-US", ein Ländercode wie"US"(Camoufox wählt dann eine Sprache gemäß der Sprecherverteilung des Landes) oder eine Liste. Der erste Eintrag steuert dieIntl-API.humanize:Trueoder ein Float mit der maximalen Dauer einer Cursorbewegung in Sekunden. Stable 0.5.6 zeichnet noch Bézier-Kurven. Der main-Branch ist am 24. September 2026 dazu übergegangen, aufgezeichnete menschliche Mauspfade aus dem Cursory-Datensatz abzuspielen. Das bekommen Sie also nur mit den Firefox-156-Prereleases oder späteren Builds.headless: standardmäßigFalse.Truenutzt den Headless-Modus von Firefox, den Camoufox so patcht, dass er wie ein normales Fenster aussieht."virtual"startet den Browser mit sichtbarem Fenster in einem virtuellen Xvfb-Display. Diese Option gibt es nur unter Linux, und das Paketxvfbmuss installiert sein.os: beschränkt die erzeugte Identität auf"windows","macos","linux"oder eine Liste davon.block_webrtc,block_images,block_webgl: Schalter. Laut den Warnungen des Projekts selbst wurde berichtet, dass das Blockieren von WebGL oder Bildern bei großen WAFs zur Erkennung führt.
Die Seite zum virtuellen Display begründet "virtual" so: Camoufox patcht zwar den Headless-Modus, aber „der Headless-Modus könnte in Zukunft dennoch erkennbar sein“. Auf einem Linux-Server kostet Xvfb etwas zusätzlichen Speicher und beseitigt eine ganze Klasse von Headless-Merkmalen. Das lohnt sich meistens.
Ein funktionierendes Beispiel: länderspezifisch, sticky, kohärent
Das folgende Beispiel öffnet eine mehrstufige Sitzung über das ProxyHat-Gateway mit deutschem Exit, lässt Camoufox Zeitzone und Locale aus der Exit-IP ableiten und prüft, ob die Identität stimmig ist, bevor echte Arbeit beginnt. Land und Session stehen beide im Proxy-Benutzernamen.
import asyncio
import secrets
from camoufox.async_api import AsyncCamoufox
PROXY_USER = "USERNAME"
PROXY_PASS = "PASSWORD"
def proxy_for(country: str, session_id: str) -> dict:
# Sticky Session + Länder-Targeting, beides im Benutzernamen kodiert
return {
"server": "http://gate.proxyhat.com:8080",
"username": f"{PROXY_USER}-country-{country}-sid-{session_id}-ttl-10m",
"password": PROXY_PASS,
}
COHERENCE_JS = """() => ({
tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
offsetMin: new Date().getTimezoneOffset(),
lang: navigator.language,
langs: navigator.languages,
platform: navigator.platform,
})"""
async def run(country: str = "DE") -> None:
session_id = secrets.token_hex(4) # eine IP für den gesamten Ablauf
async with AsyncCamoufox(
proxy=proxy_for(country, session_id),
geoip=True, # Zeitzone/Locale/Geo/WebRTC aus der Exit-IP
humanize=True, # menschenähnliche Cursorbewegung
headless="virtual", # Linux + Xvfb; anderswo headless=True verwenden
os=["windows", "macos"],
) as browser:
page = await browser.new_page()
# 1. Was sieht die Außenwelt?
await page.goto("https://ipinfo.io/json")
exit_info = await page.evaluate("() => JSON.parse(document.body.innerText)")
# 2. Was behauptet der Browser?
claimed = await page.evaluate(COHERENCE_JS)
print("exit:", exit_info.get("ip"), exit_info.get("country"), exit_info.get("timezone"))
print("browser:", claimed)
if exit_info.get("timezone") != claimed["tz"]:
raise RuntimeError("timezone does not match exit IP; abort before real traffic")
# 3. Echte mehrstufige Arbeit über dieselbe IP
await page.goto("https://example.com/", wait_until="domcontentloaded")
# ... einloggen, paginieren, absenden, alles mit derselben session_id
asyncio.run(run("DE"))
Warum es so aufgebaut ist:
- Mit
geoip=Trueist die Sticky Session unverzichtbar. Der Lookup passiert einmal, beim Start des Browsers: Camoufox'public_ip()schickt über Ihren Proxy eine Anfrage an einen öffentlichen IP-Echo-Dienst und baut die Identität aus der Antwort. Enthält der Benutzername keine Session, kann ein rotierendes Gateway der nächsten Verbindung eine andere Residential-IP geben. In einem Land mit nur einer Zeitzone fällt das selten auf. In den USA, Russland, Brasilien oder Australien kann die zweite IP mehrere Zeitzonen von der entfernt sein, die der Browser meldet. Eine Sticky Session sorgt dafür, dass Lookup-IP und Browsing-IP identisch sind (mehr dazu in unserem Leitfaden Sticky vs. rotierende Sessions). - Eine Session-ID pro Browser, nicht pro Seite. Rotieren Sie, indem Sie den Browser schließen und einen neuen mit neuer
session_idstarten. So bekommen Sie neue IP und neuen Fingerprint gleichzeitig, und genau so sieht ein anderer Besucher aus. - Die ipinfo-Prüfung ist ein günstiger Stolperdraht. Jeder IP-Geolocation-Endpunkt eignet sich. Es geht darum, vor den ersten Anfragen ans Ziel zu vergleichen, was das Netzwerk sagt und was der Browser sagt. Geolocation-Datenbanken sind sich an den Rändern uneinig, also werten Sie eine Abweichung als Anlass für einen Neustart, nicht als Beweis, dass etwas kaputt ist.
- Den HTTP-Endpunkt bevorzugen. Die Netzwerkdokumentation von Playwright dokumentiert Benutzername/Passwort nur für HTTP(S)-Proxies. SOCKS5 (
gate.proxyhat.com:1080) wird als Proxy-Typ unterstützt, aber authentifiziertes SOCKS über einen Browser ist genau die Stelle, an der Setups gern scheitern. HTTP vs. SOCKS5 behandelt die weiteren Abwägungen.
Checkliste zur Fingerprint-Kohärenz
Kohärenz heißt: Land der Exit-IP, Zeitzone, Sprache, WebRTC-Adresse, Betriebssystem, Schriften und GPU beschreiben alle eine plausible Maschine an einem Ort. Camoufox kümmert sich um die Browserseite; die meisten Fehler entstehen durch Einstellungen, die Sie überschreiben. Prüfen Sie Folgendes, bevor Sie hochskalieren:
- Land der Exit-IP ↔ Zeitzone. Prüfen Sie sowohl
Intl.DateTimeFormat().resolvedOptions().timeZoneals auchDate.getTimezoneOffset(). Erkennungsskripte vergleichen die per Geolocation ermittelte Zeitzone der IP mit der des Browsers, und eine Abweichung ist eines der ältesten Proxy-Merkmale. Mitgeoip=Trueauf einer Sticky Session stimmen sie per Konstruktion überein. - Land der Exit-IP ↔ Sprache.
navigator.language,navigator.languagesund derAccept-Language-Header sollten zum Land passen. Camoufox hält Header undnavigatorfür Sie synchron. Wenn Sielocale=übergeben, dann eine vollständige Locale mit Region ("de-DE", nicht"de"): Das Projekt warnt, dass eine fehlende Region für Sie erzeugt wird und „Verdacht erregen kann, wenn Ihre IP nicht zur Region Ihrer Locale passt“. - WebRTC ↔ Exit-IP. WebRTC kann Ihre echte lokale oder öffentliche Adresse offenlegen und den Proxy umgehen. Bei aktiviertem
geoipfälscht Camoufox die WebRTC-IPv4 auf Protokollebene auf die Exit-IP und schaltet IPv6-DNS ab. Lassen Sie WebRTC aktiviert und gefälscht statt blockiert, denn ein Desktop-Firefox ganz ohne WebRTC ist ungewöhnlich. - Geolocation-API ↔ IP. Camoufox füllt Breiten- und Längengrad aus dem GeoIP-Lookup und setzt die Berechtigungs-Pref, sodass
navigator.permissions.query({name: "geolocation"})konsistent zur ausgegebenen Position „granted“ meldet. Setzen Sie die Geolocation nicht von Hand inconfig. Die Bibliothek warnt, das „kann zur Erkennung führen, wenn Ihre Ziel-Geolocation nicht zu Ihrer IP passt“. - Betriebssystem ↔ Schriften ↔ GPU. Der Generator zieht aus einem statistischen Modell echten Traffics, und eine Kohärenzprüfung verwirft unmögliche Kombinationen, etwa einen Windows-User-Agent mit Apple-M1-GPU. Vermeiden Sie
custom_fonts_only=Trueund übergeben Sie nurwebgl_config-Paare, die das Modell auf diesem Betriebssystem kennt (alles andere löstValueErroraus). - User-Agent: Finger weg.
User-Agentodernavigator-Felder manuell zu setzen, ist der schnellste Weg, Netzwerk und JavaScript in Widerspruch zu bringen. Die Bibliothek warnt vor beidem. - IP-Typ ↔ behauptetes Gerät. Ein erzeugter Consumer-Desktop auf dem ASN eines Hosting-Anbieters ist ein inkohärentes Paar, egal wie gut der Fingerprint ist. Genau hier rechtfertigen Residential- (oder ISP-)IPs ihren Preis. Unser Erklärartikel zu Browser-Fingerprinting zeigt, wie diese Signale serverseitig kombiniert werden.
- Eine Identität pro Session. Cookies, IP und Fingerprint sollten sich alle gemeinsam ändern oder gar nicht. Ein wiederkehrendes Cookie auf einer neuen IP mit neuer GPU wirkt weniger menschlich als eine stabile Session oder eine saubere neue.
Camoufox vs. Patchright vs. nodriver: was wählen?
Entscheiden Sie zuerst nach Engine. Sieht Ihr Ziel überwiegend Chrome-Traffic oder prüft es auf V8-Verhalten, nehmen Sie ein Chromium-Werkzeug. Brauchen Sie tiefe Fingerprint-Rotation, ohne JavaScript-Patches zu schreiben, und ist Firefox-Traffic akzeptabel, nehmen Sie Camoufox. Die Tabelle fasst die Abwägungen Stand Oktober 2026 zusammen.
| Camoufox | Patchright | nodriver | |
|---|---|---|---|
| Engine | Gepatchter Firefox (Gecko + SpiderMonkey) | Chromium / Chrome (ungepatchter Browser) | Ihr installiertes Chrome, Chromium, Edge oder Brave |
| Steuerprotokoll | Juggler (gepatcht, von der Seite isoliert) | CDP, wobei Runtime.enable über isolierte Worlds vermieden wird | CDP direkt, kein WebDriver |
| API | Playwright (Python, JS/TS) | Drop-in-Ersatz für Playwright (Python, Node, Community-.NET) | Eigene asynchrone Python-API |
| Herkunft des TLS-Fingerprints | Firefox' eigener NSS-Stack, also ein Firefox-ClientHello | BoringSSL des echten Chrome, besonders mit channel="chrome" | BoringSSL des echten Chrome |
| Fingerprint-Rotation | Eingebaut, pro Start auf C++-Ebene erzeugt | Keine. Empfiehlt echtes Chrome ohne Injection | Keine eingebaut |
| Wartung (Okt. 2026) | Wieder aktiv. Stable 0.5.6 im Sep. 2026, aber zwischen März 2025 und Januar 2026 keine stabilen Releases | Folgt Playwright. Treiber v1.63.0 im Sep. 2026 veröffentlicht | Letztes PyPI-Release 0.50.3, Mai 2026 |
| Typische Schwachstellen | Firefox-spezifische Prüfung, Engine-Checks, die nur Chrome besteht, Fingerprint-Inkonsistenzen, die Anbieter finden und in ihre Checks aufnehmen | Console-API deaktiviert, nur Chromium, generische Headless- und Verhaltenssignale greifen weiterhin | Auswertung in der Main World ist beobachtbar, kein Fingerprint-Management, kleinere API als Playwright |
Die TLS-Zeile ist wichtiger, als sie aussieht. Alle drei nutzen den Netzwerk-Stack eines echten Browsers, keiner hat also die Diskrepanz, die entsteht, wenn Pythons requests behauptet, Chrome zu sein. Camoufox präsentiert aber immer einen Firefox-Handshake. Erwartet das Modell einer Website für den Großteil ihres Traffics Chrome-typisches TLS, lesen Sie in unserem Erklärartikel zu TLS-Fingerprinting, wie JA3/JA4 für diese Art von Profiling genutzt werden.
Ehrliche Grenzen
Camoufox kann eine Sache gut, nämlich eine kohärente, rotierende Firefox-Identität ohne JavaScript-Patching, und das hat echte Kosten.
Firefox ist nur ein kleiner Teil des Traffics
StatCounter beziffert den Anteil von Firefox an der weltweiten Desktop-Nutzung im September 2026 auf etwa 6,1 %, gegenüber rund 65 % für Chrome. Eine kleine Population ist leichter zu modellieren, und jede Anomalie darin fällt stärker auf. Manche Websites fordern Nicht-Chromium-Browser schneller heraus. Ob Ihr Ziel dazugehört, wissen Sie erst, wenn Sie es mit Ihrem eigenen Traffic testen.
Es kann Chrome nicht imitieren
Das README sagt es direkt: Camoufox „unterstützt das Injizieren von Chromium-Fingerprints nicht vollständig“, und einige WAFs „testen auf Verhalten der SpiderMonkey-Engine, das sich unmöglich fälschen lässt“. Besteht die Website auf Chrome, bringt Sie keine Camoufox-Konfiguration ans Ziel.
Die Wartung war ungleichmäßig
Die Release-Historie zeigt die Lücke. Der letzte stabile Build vor der Pause war v135.0.1-beta.24 vom 15. März 2025. Der ursprüngliche Autor pausierte die Arbeit, und abgesehen von gelegentlichen Community-Commits erschien bis zu einer Firefox-146-Beta im Januar 2026 nichts. Das README nannte dann Clover Labs als offiziellen Maintainer. Seitdem geht es schnell voran: ein Firefox-150-Build im Mai, stabile Firefox-152-Builds ab Juli, ein offizieller TypeScript-Launcher im September und Firefox-156-Prereleases zum Monatsende. Das README trägt weiterhin die Warnung „This project is under development. It may not be suitable for stable production use“. Pinnen Sie Versionen und testen Sie ein Upgrade, bevor Sie es ausrollen.
Fingerprints sind ein bewegliches Ziel
Das Projekt sagt offen, dass Anti-Bot-Anbieter „Camoufox immer wieder testen, um auch nur eine einzige Inkonsistenz zu finden“, und dann einen Check dafür einbauen. Der menschenähnliche Cursor „kann bei ausreichend ausgefeilter Analyse dennoch erkannt werden“. Spoofing auf C++-Ebene beseitigt eine ganze Kategorie von Merkmalen, macht Sie aber nicht dauerhaft unerkennbar.
Ressourcenbedarf
Laut Projekt läuft sein entschlackter Build mit rund 200 MB und braucht weniger Speicher als ein normaler Firefox. Das ist die Angabe des Projekts, nicht unsere, und Ihre Seiten kommen noch hinzu. Es bleibt ein vollständiger Browser pro Identität. Planen Sie einen Browser pro gleichzeitiger Session statt vieler Contexts mit gemeinsamem Fingerprint, und nutzen Sie für Endpunkte ohne JavaScript schlichte HTTP-Clients.
Was Camoufox nicht löst
- IP-Reputation. Eine markierte Residential-IP bleibt markiert. Testen Sie Exits vor dem Einsatz, zum Beispiel mit unserem kostenlosen Proxy-Checker.
- Rate Limits und Verhalten. Hunderte identische Pfade pro Minute wirken automatisiert, egal wie der Fingerprint aussieht.
- CAPTCHAs, Logins und Zugriffsregeln. Camoufox gibt Ihnen keine Erlaubnis, irgendetwas zu sammeln. Respektieren Sie robots.txt und die Nutzungsbedingungen der Website, halten Sie sich von Daten hinter Authentifizierung fern, zu der Sie nicht berechtigt sind, und behandeln Sie personenbezogene Daten als DSGVO-/CCPA-relevant, auch wenn sie öffentlich sichtbar sind.
Ein vernünftiger Rollout
Beginnen Sie mit einem Land und einer Sticky Session. Protokollieren Sie die Ausgabe der Kohärenzprüfung bei jedem Start und vergleichen Sie die Blockraten mit einer Baseline von Patchright auf demselben Ziel, bevor Sie sich auf eine Engine festlegen. Gewinnt Camoufox, skalieren Sie mit zusätzlichen Browsern und frischen Session-IDs, nicht mit einem Browser für mehrere Sessions. Verliert es auf einer Website, die klar Chrome bevorzugt, zeigt Ihnen die Tabelle oben, wohin es als Nächstes geht. Das Residential-Gateway funktioniert mit allen drei Werkzeugen gleich. Ländercodes und Tarifoptionen finden Sie auf den Seiten Standorte und Residential Proxies.






