Zurück zu den Updates
New releaseSep 18, 2026

invisible_playwright v0.20.0

Playwright, das Anti-Bots nicht sehen können, also keine Captchas: gleiche API, Anti-Detect-Stealth-Headless-Firefox, unentdeckter Fingerprint, Umgehung der Bot-Erkennung, Python-Web-Scraping und Browser-Automatisierung.

Teilen
invisible_playwright

Playwright wird von Anti-Bots und Captchas erkannt.
Dieses hier läuft auf einem Anti-Detect-Firefox mit unerkennbarem Fingerprint und ist mit deinem bestehenden Playwright-Code kompatibel.

invisible_playwright - 5/5 detection suites passed

Wie es funktioniert

Anti-Bots stellen zwei Fragen, und reCAPTCHA, hCaptcha und Cloudflare Turnstile bewerten die Antworten. invisible_playwright beantwortet beide mit Ja.

1. Ist das ein echter Browser? Ja. Es ist Firefox, gepatcht auf C++-Quellcode-Ebene.

  • Der Browser-Fingerprint wird innerhalb der Engine gesetzt, nicht in die Seite injiziert: navigator, screen, GPU/WebGL, canvas, fonts, audio, WebRTC, timezone, network. Headless oder headed, in beiden Fällen dieselben Werte.
  • Kein JS-Shim, kein Override, keine Naht zum Auslesen.

2. Wird er von einer echten Person benutzt? Ja. Die Aktionen werden im Driver humanisiert.

  • Jeder Klick, Hover und Drag folgt einem natürlichen Mauspfad mit menschlichem Timing, kein teleportierender Cursor.
  • Jede Eingabe ist byte-identisch mit einer echten Maus: echte Input-Quelle, Druck, vertrauenswürdige Events.

Installation

pip install invisible-playwright
python -m invisible_playwright fetch      # one-time download, sha256-verified: 240 MB (Windows) / 262 MB (Linux x86_64) / 253 MB (Linux arm64), about 550 MB unpacked

Erfordert Python 3.11 oder neuer.

Unterstützte Plattformen: Windows x86_64, Linux x86_64 / arm64.


Verwendung

Zufälliger Fingerprint pro Session

Playwrights API, sync und async, ohne Codeänderungen. Dieselben Objekte, dieselben Aufrufe, dieselben Rückgabewerte. Einige Oberflächen liegen außerhalb des Geltungsbereichs - tracing, HAR, CDP, der API request context - und jede davon verweigert mit einem Satz, der den Grund nennt, statt sich still falsch zu verhalten. Wenn du Playwright bereits nutzt, besteht der Wechsel aus zwei Zeilen:

- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
-     browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:

Jede Session erhält einen eigenen Fingerprint (GPU, audio, fonts, screen, ~200 Felder) und Bezier-Kurven-Mausbewegung.

Sync

from invisible_playwright import InvisiblePlaywright

with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
    page = browser.new_page()
    page.goto("https://example.com")
    page.click("#submit")   # mouse arcs to the button on a Bezier curve

Async

from invisible_playwright.async_api import InvisiblePlaywright

async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
    page = await browser.new_page()
    await page.goto("https://example.com")
    await page.click("#submit")

Das browser-Objekt ist ein playwright.sync_api.Browser / playwright.async_api.Browser - jede Playwright-Methode funktioniert unverändert.

Protokolliere den Seed, um einen Lauf zu wiederholen:

sf = InvisiblePlaywright()
with sf as browser:
    print("seed =", sf.seed)
    # ...

Reproduzierbarer Fingerprint

with InvisiblePlaywright(seed=42) as browser:
    ...   # same GPU, same canvas hash, same audio context, every run

Proxies

proxy = {
    "server": "socks5://gate.example.com:1080",
    "username": "user",
    "password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

Unterstützte Schemata: socks5, socks4, http, https. DNS wird standardmäßig über den Proxy geleitet, kein lokales Leck.

Zeitzone

Die Browser-Zeitzone folgt timezone=:

# default: timezone is auto-derived from the egress IP (proxy egress if a
# proxy is set, otherwise the host's own public IP)
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

# explicit IANA zone always wins, the only way to force a specific zone
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
    ...

Festlegen bestimmter Fingerprint-Felder

Standardmäßig stammt alles aus seed. Um bestimmte Werte zu erzwingen, während der Rest seed-abgeleitet bleibt:

with InvisiblePlaywright(
    seed=42,
    pin={
        "gpu.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)",
        "gpu.vendor":   "Google Inc. (AMD)",
        "screen.width":  2560,
        "screen.height": 1440,
        "hardware.concurrency": 16,
    },
) as browser:
    ...

Ein GPU-Pin wählt eine der validierten Personas aus, statt einen freien String zu setzen, weil die ~81 getParameter-Werte und die Extension-Liste mit dem Renderer-Namen einhergehen und ein Detektor sie dagegen abgleicht. Ein Name, den der Pool nicht enthält, löst einen Fehler aus, und die Fehlermeldung listet die auf, die er enthält.

Die vollständige Liste der pinnbaren Keys, wie Pinning mit dem Bayesian-Sampler interagiert und gängige Muster findest du in docs/pinning.md.


CLI

Der installierte Befehl ist invisible-playwright, mit Bindestrich. python -m invisible_playwright funktioniert identisch und benötigt nichts im PATH.

invisible-playwright fetch    # download the engine if missing, check every cached
                              # one against the seal, print the path
invisible-playwright version  # wrapper, core and engine versions, and where the
                              # engine is cached

Dokumentation, Anleitungen und Vergleiche

Wenn du lieber promptest als skriptest. Diese Seite ist die Engine, als Python- Bibliothek. Zwei Wege, sie ohne Code zu nutzen, beide einzeilig: aus einem MCP-Client, den du bereits hast (Claude Code, Claude Desktop, Cursor), claude mcp add stealth -- uvx aihawk, siehe die MCP-Server-Seite; oder mit einer Oberfläche und einem enthaltenen Modell, wobei nur ein OpenRouter-Key nötig ist, uvx aihawk ui --openrouter-key sk-or-..., siehe AIHawk. Dieselbe Engine darunter, und der zweite ist ein Client des ersten.

Alles davon liest sich besser, und ist durchsuchbar, in dem Wiki, organisiert in vier Abschnitte statt einer flachen Liste:

  • Dokumentation - Installation, der Zwei-Zeilen-Wechsel von reinem Playwright, Proxy-/Zeitzonen- Konfiguration, Pinning bestimmter Felder, die CLI.
  • Anleitungen - wie Erkennung tatsächlich funktioniert, in sieben Gruppen: Browser-Identität, canvas/WebGL/fonts/ audio, Netzwerk und WebRTC, die Automatisierungsschicht, KI-Agenten, die Detektoren selbst aus dem Quellcode erklärt, und Testing.
  • Vergleiche - gegen Camoufox, Patchright, nodriver und playwright-stealth, und das Argument für Firefox gegenüber Chromium allgemein.
  • Integrationen - Scrapy, Crawlee, Robot Framework, CodeceptJS, Test-Runner, Playwright MCP, und die Frameworks, zu denen es nicht passt, namentlich.

Kategorien