Zurück zu den Updates
New releaseAug 14, 2026

invisible_playwright v0.7.0

Kostenloser Antidetect-Browser-Stealth für Playwright: unerkannter Headless-Firefox-Fingerprint. Python-Scraping, Umgehung von reCAPTCHA und Bot-Erkennung. Open Source

Teilen
invisible_playwright, Playwright auf einem Anti-Detect-Firefox. Eine Animation: der zweizeilige Wechsel von Playwright, der im Engine gesetzte Fingerprint, eine Maus, die sich wie eine Hand bewegt, und die Bot-Tests, die er besteht.

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

invisible_playwright - 5/5 Erkennungssuiten bestanden

So funktioniert es

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, Zeitzone, Netzwerk. Headless oder headed, in beiden Fällen dieselben Werte.
  • Kein JS-Shim, kein Override, keine Nahtstelle zum Auslesen.

2. Benutzt ihn eine echte Person? Ja. Die Aktionen werden im Driver humanisiert.

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

Installation

Windows, in PowerShell:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
uv init --python ">=3.11" my-project
cd my-project
uv add invisible-playwright
uv run invisible-playwright fetch      # one-time download, sha256-verified: 240 MB, about 550 MB unpacked

Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv init --python ">=3.11" my-project
cd my-project
uv add invisible-playwright
uv run invisible-playwright fetch      # one-time download, sha256-verified: 262 MB (x86_64) / 253 MB (arm64), about 550 MB unpacked

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

Speichern Sie anschließend eines der folgenden Beispiele als main.py in my-project und führen Sie es mit uv run main.py aus.


Verwendung

Zufälliger Fingerprint pro Sitzung

Playwrights API, synchron und asynchron, ohne Codeänderungen. Dieselben Objekte, dieselben Aufrufe, dieselben Rückgabewerte. Einige Oberflächen liegen außerhalb des Geltungsbereichs – Tracing, HAR, CDP, der API-Request-Kontext – und jede davon verweigert den Dienst mit einem Satz, der den Grund nennt, statt sich stillschweigend falsch zu verhalten. Wenn Sie Playwright bereits verwenden, besteht die Umstellung 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 Sitzung erhält einen eigenen Fingerprint (GPU, Audio, Schriftarten, Bildschirm, ~200 Felder) und Bézier-Kurven-Mausbewegungen.

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

Asynchron

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 erneut abzuspielen:

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

Reproduzierbarer Fingerabdruck

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:
    ...

Bestimmte Fingerprint-Felder festlegen

Standardmäßig stammt alles aus seed. Um bestimmte Werte zu erzwingen, während der Rest aus dem 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, anstatt einen freien String zu setzen, weil die ~81 getParameter-Werte und die Erweiterungsliste 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 Namen auf, die er enthält.

Die vollständige Liste der pinnbaren Schlüssel, wie das Pinning mit dem Bayesian-Sampler interagiert und gängige Muster finden sich in docs/pinning.md.


CLI

Der installierte Befehl ist invisible-playwright, mit einem 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, Leitfäden und Vergleiche

Kategorien