
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.
<div align="center">
<picture>
<source media="(max-width: 374px) and (prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-small-dark.gif">
<source media="(max-width: 374px)" srcset="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-small-light.gif">
<source media="(max-width: 1239px) and (prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-phone-dark.gif">
<source media="(max-width: 1239px)" srcset="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-phone-light.gif">
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-dark.gif">
<img alt="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." src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-light.gif" width="100%">
</picture>
<h3 align="center">Playwright wird von Anti-Bots und Captchas erkannt.<br>
Dieser hier läuft auf einem Anti-Detect-Firefox mit unentdecktem Fingerprint und ist mit deinem bestehenden Playwright-Code kompatibel.</h3>
</div>

## 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
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:
```bash
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:
```diff
- 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**
```python
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**
```python
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:
```python
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
```
### Reproduzierbarer Fingerabdruck
```python
with InvisiblePlaywright(seed=42) as browser:
... # same GPU, same canvas hash, same audio context, every run
```
### Proxies
```python
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=`:
```python
# 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:
```python
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](https://github.com/feder-cr/invisible_playwright/blob/main/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.
```bash
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
**Wenn Sie lieber einen Prompt als ein Skript verwenden möchten.** Diese Seite ist die Engine als Python-Bibliothek. Zwei Möglichkeiten, sie ohne Code zu nutzen, beide einzeilig: aus einem MCP-Client, den Sie bereits haben (Claude Code, Claude Desktop, Cursor), `claude mcp add stealth -- uvx aihawk`, siehe [die MCP-Server-Seite](https://github.com/feder-cr/AIHawk/wiki/mcp-server); oder mit einer Oberfläche und einem enthaltenen Modell, wobei nur ein OpenRouter-Schlüssel benötigt wird, `uvx aihawk ui --openrouter-key sk-or-...`, siehe [AIHawk](https://github.com/feder-cr/AIHawk). Darunter dieselbe Engine, und die zweite ist ein Client der ersten.
Alles davon liest sich besser und ist durchsuchbar in **[dem Wiki](https://github.com/feder-cr/invisible_playwright/wiki)**, gegliedert in vier Abschnitte statt einer einzigen flachen Liste:
- **[Dokumentation](https://github.com/feder-cr/invisible_playwright/blob/main/docs/documentation.md)** - Installation, der zweizeilige Wechsel von reinem Playwright, Proxy-/Zeitzonen-Konfiguration, das Festlegen bestimmter Felder, die CLI.
- **[Anleitungen](https://github.com/feder-cr/invisible_playwright/blob/main/docs/guides.md)** - wie Erkennung tatsächlich funktioniert, in sieben Gruppen: Browser-Identität, Canvas/WebGL/Schriften/Audio, Netzwerk und WebRTC, die Automatisierungsschicht, KI-Agenten, die Detektoren selbst aus dem Quellcode erklärt und Tests.
- **[Vergleiche](https://github.com/feder-cr/invisible_playwright/blob/main/docs/comparisons.md)** - gegen Camoufox, Patchright, nodriver und playwright-stealth sowie das Argument für Firefox gegenüber Chromium im Allgemeinen.
- **[Integrationen](https://github.com/feder-cr/invisible_playwright/blob/main/docs/integrations)** - Scrapy, Crawlee, Robot Framework, CodeceptJS, Test-Runner, Playwright MCP und die Frameworks, zu denen es namentlich nicht passt.
Wenn Sie nicht wissen, wo Sie anfangen sollen: [Drei Wege, Playwright unentdeckt zu machen](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-stealth-levels.md) ist die Karte, auf die die meisten anderen Seiten zurückverweisen, [Playwright auf einer Website als Bot erkannt](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-detected-as-bot.md) ist die Reihenfolge zur Fehlerbehebung, und [navigator.webdriver ist nicht das Verrätermerkmal, für das Sie es halten](https://github.com/feder-cr/invisible_playwright/blob/main/docs/navigator-webdriver-explained.md) erklärt die berühmteste Eigenschaft in diesem Bereich und warum das alleinige Patchen fast nichts bringt.
Der Detektoren-Abschnitt behandelt jetzt die kommerziellen Anti-Bot-Produkte namentlich, jeweils aus ihrer eigenen Dokumentation oder aus bestätigtem Reverse Engineering: [Cloudflare Bot Management](https://github.com/feder-cr/invisible_playwright/blob/main/docs/cloudflare-bot-management-explained.md) und [Turnstile](https://github.com/feder-cr/invisible_playwright/blob/main/docs/cloudflare-turnstile-explained.md), [DataDome](https://github.com/feder-cr/invisible_playwright/blob/main/docs/datadome-explained.md), [Kasada](https://github.com/feder-cr/invisible_playwright/blob/main/docs/kasada-explained.md), [Akamai Bot Manager](https://github.com/feder-cr/invisible_playwright/blob/main/docs/akamai-bot-manager-explained.md), [PerimeterX](https://github.com/feder-cr/invisible_playwright/blob/main/docs/perimeterx-explained.md), [hCaptcha](https://github.com/feder-cr/invisible_playwright/blob/main/docs/hcaptcha-explained.md), [Imperva](https://github.com/feder-cr/invisible_playwright/blob/main/docs/imperva-incapsula-explained.md) und [den Rest des Sets](https://github.com/feder-cr/invisible_playwright/blob/main/docs/guides-detectors-explained.md).
## Verwandte Projekte
**Die anderen Teile dieses Projekts.** Die Engine ist die Mitte von drei Teilen, und die beiden um sie herum sind der Weg, über den die meisten sie erreichen:
- **[invisible_core](https://github.com/feder-cr/invisible_core)** - Seed zu Fingerprint zu Präferenzen, plus Proxy und Geolokalisierung. Dieses Paket pinnt es.
- **[AIHawk](https://github.com/feder-cr/AIHawk)** - diese Engine als MCP-Server (`uvx aihawk`, für jeden Client, der sein eigenes Modell mitbringt) und im selben Paket eine Oberfläche mit enthaltenem Modell, mit einem einzigen Befehl. Die Oberfläche ist ein Client des Servers, ohne privaten Pfad zum Browser.
**Die Open-Source-Nachbarn.** Welcher passt, hängt davon ab, auf welcher Ebene Ihr Problem liegt, und ob Sie Firefox oder Chromium benötigen: [drei Wege, Playwright unentdeckt zu machen](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-stealth-levels.md) arbeitet durch, was jede Ebene erreichen kann, und [KI-Browser-Agenten und Stealth](https://github.com/feder-cr/invisible_playwright/blob/main/docs/ai-browser-agents-stealth.md) behandelt die Frameworks, die für Sie Chromium statt CDP wählen.
**Auf der Firefox-Seite**
- **[Camoufox](https://github.com/daijro/camoufox)** – patcht auch C++, größere Angriffsfläche, liefert eine Fingerprint-Datenbank mit, statt eine aus einem Seed abzuleiten. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-camoufox.md).
- **[LibreWolf](https://librewolf.net)** – ein Firefox mit Datenschutz-Standardeinstellungen zum Surfen, nicht zur Automatisierung.
- **[arkenfox/user.js](https://github.com/arkenfox/user.js)** – Härtung über Einstellungen. Wo eine Einstellung ausreicht, nutze sie.
**Auf der Chromium-Seite**
- **[Patchright](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright)** – ein gepatchter Playwright-Fork: Die Arbeit steckt im Treiber, nicht in der Binärdatei. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-patchright.md).
- **[nodriver](https://github.com/ultrafunkamsterdam/nodriver)** – Nachfolger von `undetected-chromedriver`, der Chrome über CDP steuert. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-nodriver.md).
- **[rebrowser-patches](https://github.com/rebrowser/rebrowser-patches)** – behebt das `Runtime.enable`-CDP-Leck. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-rebrowser-patches.md).
- **[fingerprint-suite](https://github.com/apify/fingerprint-suite)** – ein Bayes'scher Fingerprint-Generator, der anschließend in die Seite injiziert wird. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-fingerprint-suite.md).
- **[playwright-with-fingerprints](https://github.com/bablosoft/playwright-with-fingerprints)** – Werte von einem kostenpflichtigen Remote-Dienst, nur für Windows. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-playwright-with-fingerprints.md).
- **[playwright-stealth](https://github.com/Mattwmaster58/playwright_stealth)** – ein Init-Script-Patch; sein Maintainer bezeichnet ihn als Proof-of-Concept. [Vergleich](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-playwright-stealth.md).
- **[puppeteer-extra-plugin-stealth](https://github.com/berstend/puppeteer-extra)** – der Ursprung dieser Linie, letzter substanzieller Commit Mitte 2024. [Was das bedeutet](https://github.com/feder-cr/invisible_playwright/blob/main/docs/puppeteer-extra-stealth-unmaintained.md).
- **[selenium-stealth](https://github.com/diprajpatra/selenium-stealth)** – derselbe Ansatz für Selenium, letzter Commit Dezember 2021. [Was das bedeutet](https://github.com/feder-cr/invisible_playwright/blob/main/docs/selenium-stealth-unmaintained.md).
- **[pyppeteer](https://github.com/pyppeteer/pyppeteer)** – laut eigener README nicht mehr gepflegt, die auf `playwright-python` verweist. [Worum es bei dieser Empfehlung geht](https://github.com/feder-cr/invisible_playwright/blob/main/docs/pyppeteer-unmaintained-playwright.md).
---
## Was in der Engine gepatcht wird
Für alles Folgende gelten zwei Regeln. Jeder Wert wird **bevor eine Seite danach fragen kann** festgelegt, und zwar innerhalb des Browsers, sodass es keinen JavaScript-Shim gibt, den man finden könnte. Und jeder Wert stammt aus **einem Profil**, sodass sich keine zwei Oberflächen widersprechen – genau daran wird ein gefälschter Browser üblicherweise enttarnt. Quelle:
[feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch).
**Identität**
- `navigator`, der User Agent und die Client Hints werden gemeinsam abgeleitet, sodass sie nicht voneinander abweichen können: [does Playwright set navigator.webdriver](https://github.com/feder-cr/invisible_playwright/blob/main/docs/does-playwright-set-navigator-webdriver.md), [client hints and Sec-Fetch](https://github.com/feder-cr/invisible_playwright/blob/main/docs/client-hints-sec-fetch.md).
- `navigator.languages` und der `Accept-Language`-Header sind dieselbe Deklaration, gesendet und gelesen: [Accept-Language and navigator.languages](https://github.com/feder-cr/invisible_playwright/blob/main/docs/accept-language-navigator-languages.md).
- Bildschirmgeometrie, `devicePixelRatio` und die Media Queries, die sie offenlegen, werden deklariert und nicht vom Host gelesen: [devicePixelRatio and the Firefox pref](https://github.com/feder-cr/invisible_playwright/blob/main/docs/devicepixelratio-firefox-pref.md), [CSS media query fingerprinting](https://github.com/feder-cr/invisible_playwright/blob/main/docs/css-media-query-fingerprinting.md).
**Rendering**
- Das Auslesen des Canvas ist pro Seed deterministisch und behält die echte Form bei, statt blockiert oder verrauscht zu werden: [canvas fingerprint noise](https://github.com/feder-cr/invisible_playwright/blob/main/docs/canvas-fingerprint-noise.md), [why a canvas fingerprint changes every run](https://github.com/feder-cr/invisible_playwright/blob/main/docs/canvas-fingerprint-changes-every-run.md).
- WebGL meldet eine kohärente GPU-Persona: Vendor, Renderer und die Parameterlimits werden gegeneinander geprüft, nicht einzeln gesetzt: [WebGL renderer strings](https://github.com/feder-cr/invisible_playwright/blob/main/docs/webgl-renderer-strings.md), [WebGL parameters are identical](https://github.com/feder-cr/invisible_playwright/blob/main/docs/webgl-parameters-are-identical.md).
- Schriften werden mit dem Browser ausgeliefert, sodass dieselben Schriftschnitte auf jedem Host existieren und nicht länger die Font-Engine der Plattform entscheidet: [bundled fonts across platforms](https://github.com/feder-cr/invisible_playwright/blob/main/docs/bundled-fonts-cross-platform.md), [why headless browsers render different fonts](https://github.com/feder-cr/invisible_playwright/blob/main/docs/headless-fonts-differ.md), [detecting installed fonts from JavaScript](https://github.com/feder-cr/invisible_playwright/blob/main/docs/detect-installed-fonts-javascript.md).
- Textmetriken folgen diesen Schriften: `measureText` liefert über zehn Zahlen aus einem einzigen Aufruf, ohne Berechtigungsabfrage: [measureText and TextMetrics](https://github.com/feder-cr/invisible_playwright/blob/main/docs/measuretext-textmetrics-fingerprinting.md).
- Canvas und WebGL stimmen für denselben Seed über Betriebssysteme hinweg überein: [cross-platform consistency](https://github.com/feder-cr/invisible_playwright/blob/main/docs/canvas-webgl-cross-platform-consistency.md), [canvas differs across operating systems](https://github.com/feder-cr/invisible_playwright/blob/main/docs/canvas-differs-across-operating-systems.md).
**Audio und Medien**
- Der Audio-Stack antwortet aus dem Profil statt aus dem Host-Gerät: [AudioContext fingerprinting](https://github.com/feder-cr/invisible_playwright/blob/main/docs/audiocontext-fingerprinting.md), [sample rate and latency](https://github.com/feder-cr/invisible_playwright/blob/main/docs/audiocontext-samplerate-latency-fingerprint.md).
- Die Codec-Tabelle wird deklariert, sodass ein Linux-Host eine Windows-Frage nicht mit Linux-Unterstützung beantwortet: [codec fingerprinting](https://github.com/feder-cr/invisible_playwright/blob/main/docs/codec-fingerprinting.md).
**Netzwerk**
- WebRTC bietet einen synthetischen Kandidaten an, der den Proxy-Ausgang trägt, statt die echte Adresse preiszugeben oder gar keinen anzubieten, was selbst ein Erkennungsmerkmal wäre: [WebRTC ICE candidate spoofing](https://github.com/feder-cr/invisible_playwright/blob/main/docs/webrtc-ice-candidate-spoofing.md), [does the WebRTC IP match the proxy exit](https://github.com/feder-cr/invisible_playwright/blob/main/docs/webrtc-ip-match-proxy-exit.md).
- DNS wird über den Proxy aufgelöst, auch wenn der Proxy nicht in den Einstellungen steht: [does a proxy leak DNS](https://github.com/feder-cr/invisible_playwright/blob/main/docs/does-a-proxy-leak-dns-doh-explained.md), [how to check for a proxy IP leak](https://github.com/feder-cr/invisible_playwright/blob/main/docs/how-to-check-proxy-ip-leak.md).
- Die Zeitzone stammt von der Egress-IP, offline aufgelöst, sodass sie zum Ausgang passt: [timezone and proxy mismatch](https://github.com/feder-cr/invisible_playwright/blob/main/docs/timezone-proxy-mismatch.md), [offline GeoIP timezone](https://github.com/feder-cr/invisible_playwright/blob/main/docs/offline-geoip-timezone-proxy.md).
**Die Automatisierungsschicht**
- Eingabeereignisse stammen aus dem echten Eingabepfad, sodass `isTrusted` wahr ist, weil es wahr ist: [Playwright clicks and isTrusted](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-clicks-istrusted.md).
- Der Zeiger folgt einem menschlichen Pfad und Timing, in einer Kadenz, die ein echtes Gerät erzeugen könnte: [human mouse movement](https://github.com/feder-cr/invisible_playwright/blob/main/docs/human-mouse-movement.md), [mouse dynamics as behavioural biometrics](https://github.com/feder-cr/invisible_playwright/blob/main/docs/mouse-dynamics-behavioural-biometrics.md).
- Die Debugger-Oberfläche beantwortet nicht die Timing-Fragen, die einen gesteuerten Browser verraten: [debugger timing detection](https://github.com/feder-cr/invisible_playwright/blob/main/docs/debugger-timing-detection.md).
- Shadow Roots im Closed-Modus sind erreichbar, was Standard-Playwright in keiner der beiden Engines kann, während die Seite weiterhin `null` liest: [closed shadow roots](https://github.com/feder-cr/invisible_playwright/blob/main/docs/closed-shadow-root-playwright.md).
---
## Lizenz
MIT – siehe [LICENSE](https://github.com/feder-cr/invisible_playwright/blob/main/LICENSE). Das gepatchte Firefox-Binary wird unter der MPL-2.0 (Upstream-Lizenz von Firefox) vertrieben. Die C++-Patches gegen mozilla-central, die dieses Binary erzeugen, befinden sich unter [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch).
---
## Haftungsausschluss
Dieses Projekt dient ausschließlich Bildungszwecken. Es wird ohne jegliche Gewährleistung bereitgestellt. Ich übernehme keine Verantwortung für die Art und Weise, wie es verwendet wird. Die Nutzung erfolgt auf eigenes Risiko und in Übereinstimmung mit den Gesetzen Ihrer Gerichtsbarkeit.
---
<p align="center">
Entwickelt von <a href="https://it.linkedin.com/in/federico-elia-5199951b6">Federico Elia</a>
<a href="https://it.linkedin.com/in/federico-elia-5199951b6"><img src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/badges/linkedin.svg" alt="LinkedIn"></a>
</p>
<p align="center">
<a href="https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml"><img src="https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml/badge.svg" alt="tests"></a>
<a href="https://github.com/feder-cr/invisible_playwright/blob/main/LICENSE"><img src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/badges/license.svg" alt="License: MIT"></a>
<a href="https://www.python.org/downloads/"><img src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/badges/python.svg" alt="Python 3.11+"></a>
<a href="https://github.com/feder-cr/firefox_antidetect_patch/releases"><img src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/badges/firefox.svg" alt="Firefox 151.0"></a>
<img src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/badges/docs/badges/launches.svg" alt="browser launches">
<a href="https://github.com/feder-cr/invisible_playwright/stargazers"><img src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/badges/docs/badges/stars.svg" alt="GitHub stars"></a>
</p>