Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
invisible_playwright — Playwright che gli anti-bot non riescono a vedere, quindi niente captcha: stessa API, Firefox headless stealth anti-detect, fingerprint non rilevabile, bypass del rilevamento bot, web scraping e automazione del browser in Python. | Kitploit
Strumenti/GitHubGitHub/feder-cr/invisible_playwright
Evasione IDS/IPSStrumenti di ImpersonificazioneSicurezza WebAnti-BotSpoofing dell'Impronta DigitaleBypass CAPTCHA
GitHubfeder-cr/invisible_playwright

invisible_playwright

Playwright che gli anti-bot non riescono a vedere, quindi niente captcha: stessa API, Firefox headless stealth anti-detect, fingerprint non rilevabile, bypass del rilevamento bot, web scraping e automazione del browser in Python.

Vedi Repository
1.8k2013073 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
<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 su un Firefox anti-detect. Un'animazione: il passaggio in due righe da Playwright, il fingerprint impostato all'interno del motore, un mouse che si muove come una mano e i test anti-bot che supera." src="https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-light.gif" width="100%">
</picture>
<h3 align="center">Playwright viene individuato dagli anti-bot e dai captcha.<br>
Questo gira su un Firefox anti-detect con un fingerprint non rilevabile, compatibile con il tuo codice Playwright esistente.</h3>
</div>

![invisible_playwright - 5/5 suite di rilevamento superate](https://assets.kitploit.com/production/public/readmes/7462/e23d5b9ad68fbaf1e80c3e7f70118a4e135514dc069f0b6d27076f6af3e23051.gif)

## Come funziona

Gli anti-bot pongono due domande, e reCAPTCHA, hCaptcha e Cloudflare Turnstile valutano le risposte. invisible_playwright risponde sì a entrambe.

**1. È un browser reale?** Sì. È Firefox, modificato a livello del codice sorgente C++.

- Il fingerprint del browser è impostato all'interno del motore, non iniettato nella pagina: navigator, screen, GPU/WebGL, canvas, font, audio, WebRTC, fuso orario, rete. Headless o headed, gli stessi valori in entrambi i casi.
- Nessuno shim JS, nessun override, nessuna giuntura da leggere.

**2. Lo sta usando una persona reale?** Sì. Le azioni sono umanizzate nel driver.

- Ogni clic, hover e trascinamento segue un percorso naturale del mouse con tempi umani, nessun cursore che si teletrasporta.
- Ogni input è identico byte per byte a quello di un mouse reale: sorgente di input reale, pressione, eventi trusted.

---

## Installazione

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
```

Piattaforme supportate: **Windows x86_64**, **Linux x86_64 / arm64**.

Poi salva uno degli esempi seguenti come `main.py` in `my-project` ed eseguilo con `uv run main.py`.

---

## Utilizzo
### Fingerprint casuale per sessione
**L'API di Playwright, sync e async, senza modifiche al codice.** Gli stessi oggetti, le stesse chiamate, gli stessi valori di ritorno. Alcune superfici sono fuori ambito - tracing, HAR, CDP, il contesto di richiesta API - e ciascuna rifiuta con una frase che spiega il motivo invece di comportarsi male in modo silenzioso. Se usi già Playwright, il passaggio richiede due righe:

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

Ogni sessione riceve un'impronta distinta (GPU, audio, font, schermo, ~200 campi) e un movimento del mouse a curva di Bézier.

**Sincronizzazione**
```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
```

**Asincrono**
```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")
```

L'oggetto `browser` è un `playwright.sync_api.Browser` / `playwright.async_api.Browser` - ogni metodo di Playwright funziona così com'è.

Registra il seed per riprodurre un'esecuzione:

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

### Fingerprint riproducibile

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

### Proxy

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

Schemi supportati: `socks5`, `socks4`, `http`, `https`. Il DNS viene instradato attraverso il proxy per impostazione predefinita, senza perdite locali.

### Fuso orario

Il fuso orario del browser segue `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:
    ...
```

### Fissare campi specifici dell'impronta

Per impostazione predefinita tutto proviene da `seed`. Per forzare valori specifici mentre il resto rimane derivato dal seed:

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

Un pin GPU seleziona una delle persona validate anziché impostare una stringa libera, perché i ~81 valori di `getParameter` e l'elenco delle estensioni viaggiano con il nome del renderer e un rilevatore li verifica incrociandoli con esso. Un nome che il pool non contiene genera un errore, e l'errore elenca quelli che invece contiene.

L'elenco completo delle chiavi pinnabili, come il pinning interagisce con il campionatore bayesiano e i pattern comuni sono in **[docs/pinning.md](https://github.com/feder-cr/invisible_playwright/blob/main/docs/pinning.md)**.

---

## CLI

Il comando installato è `invisible-playwright`, con un trattino. `python -m
invisible_playwright` funziona in modo identico e non richiede nulla nel 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
```

## Documentazione, guide e confronti

**Se preferisci dare istruzioni invece di scrivere script.** Questa pagina è il motore, come libreria
Python. Due modi per usarlo senza scrivere codice, entrambi in una riga: da un client MCP
che hai già (Claude Code, Claude Desktop, Cursor),
`claude mcp add stealth -- uvx aihawk`, vedi
[la pagina del server MCP](https://github.com/feder-cr/AIHawk/wiki/mcp-server); oppure con un'
interfaccia e un modello inclusi, che richiede solo una chiave OpenRouter,
`uvx aihawk ui --openrouter-key sk-or-...`, vedi
[AIHawk](https://github.com/feder-cr/AIHawk). Lo stesso motore sotto, e il secondo
è un client del primo.

Tutto si legge meglio, ed è ricercabile, nella
**[wiki](https://github.com/feder-cr/invisible_playwright/wiki)**,
organizzata in quattro sezioni invece di un unico elenco piatto:

- **[Documentazione](https://github.com/feder-cr/invisible_playwright/blob/main/docs/documentation.md)** -
  installazione, il passaggio in due righe da Playwright semplice, configurazione di
  proxy/fuso orario, blocco di campi specifici, la CLI.
- **[Guide](https://github.com/feder-cr/invisible_playwright/blob/main/docs/guides.md)** - come
  funziona davvero il rilevamento, in sette gruppi: identità del browser, canvas/WebGL/font/
  audio, rete e WebRTC, il livello di automazione, agenti AI, i rilevatori stessi
  spiegati dal codice sorgente, e i test.
- **[Confronti](https://github.com/feder-cr/invisible_playwright/blob/main/docs/comparisons.md)** -
  con Camoufox, Patchright, nodriver e playwright-stealth, e le ragioni per preferire
  Firefox a Chromium in generale.
- **[Integrazioni](https://github.com/feder-cr/invisible_playwright/blob/main/docs/integrations)** -
  Scrapy, Crawlee, Robot Framework, CodeceptJS, test runner, Playwright MCP, e i
  framework a cui non si adatta, per nome.

Se non sai da dove iniziare: [Tre modi per rendere Playwright non rilevabile](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-stealth-levels.md)
è la mappa a cui rimandano la maggior parte delle altre pagine, [Playwright rilevato come bot su un sito](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-detected-as-bot.md)
è l'ordine di risoluzione dei problemi, e [navigator.webdriver non è l'indizio che pensi](https://github.com/feder-cr/invisible_playwright/blob/main/docs/navigator-webdriver-explained.md)
spiega la proprietà più famosa in questo ambito e perché correggerla da sola ti dia
quasi nulla.

La sezione dei rilevatori ora copre i prodotti anti-bot commerciali per nome, ciascuno
letto dalla propria documentazione o da reverse engineering confermato:
[Cloudflare Bot Management](https://github.com/feder-cr/invisible_playwright/blob/main/docs/cloudflare-bot-management-explained.md) e
[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), e
[il resto del gruppo](https://github.com/feder-cr/invisible_playwright/blob/main/docs/guides-detectors-explained.md).

## Progetti correlati

**Gli altri pezzi di questo.** Il motore è quello centrale di tre, e i
due che lo circondano sono il modo in cui la maggior parte delle persone lo raggiunge:

- **[invisible_core](https://github.com/feder-cr/invisible_core)** - dal seed
  all'impronta alle preferenze, più proxy e geolocalizzazione. Questo pacchetto lo blocca.
- **[AIHawk](https://github.com/feder-cr/AIHawk)** - questo motore come server
  MCP (`uvx aihawk`, per qualsiasi client che porti il proprio
  modello) e, nello stesso pacchetto, un'interfaccia con un modello incluso, da
  un solo comando. L'interfaccia è un client del server, senza alcun percorso privato
  verso il browser.

**I vicini open-source.** Quale si adatta dipende dal livello a cui si trova il tuo problema,
e dal fatto che tu abbia bisogno di Firefox o Chromium:
[tre modi per rendere Playwright non rilevabile](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-stealth-levels.md) esamina
cosa può raggiungere ciascun livello, e [agenti browser AI e stealth](https://github.com/feder-cr/invisible_playwright/blob/main/docs/ai-browser-agents-stealth.md)
copre i framework che scelgono Chromium invece di CDP per te.

**Sul fronte Firefox**

- **[Camoufox](https://github.com/daijro/camoufox)** - applica patch anche a C++, superficie più ampia, distribuisce un database di fingerprint invece di derivarne uno da un seed. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-camoufox.md).
- **[LibreWolf](https://librewolf.net)** - un Firefox con impostazioni predefinite orientate alla privacy, da usare per navigare, non per l'automazione.
- **[arkenfox/user.js](https://github.com/arkenfox/user.js)** - hardening tramite le preferenze. Dove una preferenza è sufficiente, usala.

**Sul versante Chromium**

- **[Patchright](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright)** - un fork di Playwright con patch: il lavoro avviene nel driver, non nel binario. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-patchright.md).
- **[nodriver](https://github.com/ultrafunkamsterdam/nodriver)** - successore di `undetected-chromedriver`, che pilota Chrome tramite CDP. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-nodriver.md).
- **[rebrowser-patches](https://github.com/rebrowser/rebrowser-patches)** - corregge la fuga di informazioni CDP `Runtime.enable`. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-rebrowser-patches.md).
- **[fingerprint-suite](https://github.com/apify/fingerprint-suite)** - un generatore bayesiano di fingerprint, poi iniettato nella pagina. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-fingerprint-suite.md).
- **[playwright-with-fingerprints](https://github.com/bablosoft/playwright-with-fingerprints)** - valori da un servizio remoto a pagamento, solo per Windows. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-playwright-with-fingerprints.md).
- **[playwright-stealth](https://github.com/Mattwmaster58/playwright_stealth)** - una patch tramite init-script; il suo manutentore la definisce una proof-of-concept. [Confronto](https://github.com/feder-cr/invisible_playwright/blob/main/docs/vs-playwright-stealth.md).
- **[puppeteer-extra-plugin-stealth](https://github.com/berstend/puppeteer-extra)** - l'originale di quella discendenza, ultimo commit sostanziale a metà 2024. [Cosa significa](https://github.com/feder-cr/invisible_playwright/blob/main/docs/puppeteer-extra-stealth-unmaintained.md).
- **[selenium-stealth](https://github.com/diprajpatra/selenium-stealth)** - lo stesso approccio su Selenium, ultimo commit dicembre 2021. [Cosa significa](https://github.com/feder-cr/invisible_playwright/blob/main/docs/selenium-stealth-unmaintained.md).
- **[pyppeteer](https://github.com/pyppeteer/pyppeteer)** - non mantenuto secondo il suo stesso README, che rimanda a `playwright-python`. [A cosa si riferisce quel consiglio](https://github.com/feder-cr/invisible_playwright/blob/main/docs/pyppeteer-unmaintained-playwright.md).

---

## Cosa viene modificato nel motore

Due regole valgono per tutto quanto segue. Ogni valore viene deciso **prima che una pagina possa
chiederlo**, all'interno del browser, quindi non c'è alcuno shim JavaScript da trovare. E ogni valore
proviene da **un unico profilo**, così nessuna superficie contraddice un'altra, che è il modo in cui
un browser falsificato viene solitamente individuato. Fonte:
[feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch).

**Identità**
- `navigator`, lo user agent e i client hints sono derivati insieme, quindi non possono essere in disaccordo: [Playwright imposta navigator.webdriver](https://github.com/feder-cr/invisible_playwright/blob/main/docs/does-playwright-set-navigator-webdriver.md), [client hints e Sec-Fetch](https://github.com/feder-cr/invisible_playwright/blob/main/docs/client-hints-sec-fetch.md).
- `navigator.languages` e l'header `Accept-Language` sono la stessa dichiarazione, inviata e letta: [Accept-Language e navigator.languages](https://github.com/feder-cr/invisible_playwright/blob/main/docs/accept-language-navigator-languages.md).
- La geometria dello schermo, `devicePixelRatio` e le media query che lo espongono sono dichiarate, non lette dall'host: [devicePixelRatio e la pref di Firefox](https://github.com/feder-cr/invisible_playwright/blob/main/docs/devicepixelratio-firefox-pref.md), [fingerprinting tramite media query CSS](https://github.com/feder-cr/invisible_playwright/blob/main/docs/css-media-query-fingerprinting.md).

**Rendering**
- La lettura del canvas è deterministica per seed e mantiene la forma reale, anziché bloccata o offuscata: [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 riporta una persona GPU coerente: vendor, renderer e i limiti dei parametri sono verificati incrociatamente, non impostati uno alla volta: [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).
- I font sono inclusi nel browser, così gli stessi caratteri esistono su ogni host e il motore di font della piattaforma non sceglie più: [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).
- Le metriche del testo seguono quei font: `measureText` restituisce oltre dieci numeri da una singola chiamata, senza richiesta di autorizzazione: [measureText and TextMetrics](https://github.com/feder-cr/invisible_playwright/blob/main/docs/measuretext-textmetrics-fingerprinting.md).
- Canvas e WebGL concordano tra sistemi operativi per lo stesso seed: [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 e media**
- Lo stack audio risponde dal profilo anziché dal dispositivo host: [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).
- La tabella dei codec è dichiarata, così un host Linux non risponde a una domanda Windows con il supporto Linux: [codec fingerprinting](https://github.com/feder-cr/invisible_playwright/blob/main/docs/codec-fingerprinting.md).

**Rete**
- WebRTC offre un singolo candidato sintetico che trasporta l'uscita del proxy, invece di divulgare l'indirizzo reale o non offrirne nessuno, il che è di per sé un indizio: [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).
- Il DNS si risolve attraverso il proxy, anche quando il proxy non è nelle preferenze: [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).
- Il fuso orario proviene dall'IP di uscita, risolto offline, così corrisponde all'uscita: [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).

**Il livello di automazione**
- Gli eventi di input provengono dal percorso di input reale, quindi `isTrusted` è vero perché è vero: [Playwright clicks and isTrusted](https://github.com/feder-cr/invisible_playwright/blob/main/docs/playwright-clicks-istrusted.md).
- Il puntatore segue un percorso e una temporizzazione umani, a una cadenza che un dispositivo reale potrebbe produrre: [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).
- La superficie del debugger non risponde alle domande sulla temporizzazione che tradiscono un browser pilotato: [debugger timing detection](https://github.com/feder-cr/invisible_playwright/blob/main/docs/debugger-timing-detection.md).
- Le shadow root in modalità chiusa sono raggiungibili, cosa che il Playwright standard non può fare in nessuno dei due motori, mentre la pagina continua a leggere `null`: [closed shadow roots](https://github.com/feder-cr/invisible_playwright/blob/main/docs/closed-shadow-root-playwright.md).

---

## Licenza

MIT - vedi [LICENSE](https://github.com/feder-cr/invisible_playwright/blob/main/LICENSE). Il binario Firefox modificato è distribuito sotto la MPL-2.0 (licenza upstream di Firefox). Le patch C++ contro mozilla-central che producono quel binario sono disponibili su [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch).

---

## Disclaimer

Questo progetto è solo a scopo educativo. È fornito così com'è, senza alcuna garanzia. Non mi assumo alcuna responsabilità per il suo utilizzo. Usalo a tuo rischio e in conformità con le leggi della tua giurisdizione.

---

<p align="center">
  Realizzato da <a href="https://it.linkedin.com/in/federico-elia-5199951b6">Federico Elia</a>
  &nbsp;<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="avvii del browser">
  <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="stelle GitHub"></a>
</p>
Scarica lo strumento