
invisible_playwright v0.7.2
Antidetect browser gratuito e stealth per Playwright: impronta digitale di Firefox headless non rilevata. Scraping Python, bypass di recaptcha e rilevamento bot. Open source
Stealth antidetect gratuito per Playwright: fingerprint Firefox non rilevato, headless o con finestra.
Web scraping in Python e bypass dei captcha. Open source, e supera ogni test di rilevamento bot.

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, patchato a livello di sorgente C++.
- Il fingerprint del browser è impostato all'interno del motore, non iniettato nella pagina: navigator, schermo, GPU/WebGL, canvas, font, audio, WebRTC, fuso orario, rete. Headless o con finestra, gli stessi valori in entrambi i casi.
- Nessuno shim JS, nessun override, nessuna cucitura da leggere.
2. Lo sta usando una persona reale? Sì. Le azioni sono umanizzate nel driver.
- Ogni clic, hover e trascinamento segue un percorso del mouse naturale con tempi umani, nessun cursore teletrasportato.
- Ogni input è byte-identico a un mouse reale: sorgente di input reale, pressione, eventi trusted.
Guidato dalla API Playwright standard. Analisi completa: feder-cr/firefox_antidetect_patch.
Vedi ancora captcha o anti-bot? È il proxy.
Una volta gestito il browser, smette di essere la variabile. Se ricevi ancora sfide, l'indizio non è più il browser, ma l'IP da cui provieni. Circa il 90% dei proxy sono pubblici: chiunque può noleggiare lo stesso indirizzo, quindi è già noto e si trova nelle liste di IP bloccati che i siti controllano. Un browser perfetto su un IP noto perde comunque.
Installazione
pip install invisible-playwright
python -m invisible_playwright fetch # download una tantum ~238 MB (~544 MB decompresso), verificato con sha256
Piattaforme supportate: Windows x86_64, Linux x86_64 / arm64. macOS non è più supportato (le release si sono fermate a firefox-20); su un Mac il pacchetto rifiuta all'avvio con un messaggio chiaro invece di scaricare un binario che non esiste più.
Utilizzo
Fingerprint casuale per sessione
Compatibile al 100% con Playwright - sync e async, tutti i metodi, zero modifiche all'API. Se usi già Playwright, il passaggio è di due righe:
- 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 ottiene un fingerprint distinto (GPU, audio, font, schermo, ~200 campi) e movimento del mouse a curva di Bézier.
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") # il mouse si sposta verso il pulsante su una curva di Bézier
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")
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:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
Fingerprint riproducibile
with InvisiblePlaywright(seed=42) as browser:
... # stessa GPU, stesso hash canvas, stesso contesto audio, a ogni esecuzione
Proxy
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 è instradato attraverso il proxy per impostazione predefinita, nessuna perdita locale.
Fuso orario
Il fuso orario del browser segue timezone=:
# predefinito: il fuso orario è derivato automaticamente dall'IP di uscita (uscita del proxy se
# è impostato un proxy, altrimenti l'IP pubblico del host)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# la zona IANA esplicita vince sempre, l'unico modo per forzare una zona specifica
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
Fissaggio di campi specifici del fingerprint
Per impostazione predefinita tutto deriva da seed. Per forzare valori specifici mentre il resto rimane derivato dal seed:
with InvisiblePlaywright(
seed=42,
pin={
"gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)",
"gpu.vendor": "Google Inc. (NVIDIA)",
"screen.width": 2560,
"screen.height": 1440,
"hardware.concurrency": 16,
},
) as browser:
...
L'elenco completo delle chiavi fissabili, come il fissaggio interagisce con il campionatore bayesiano, e i pattern comuni sono in 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.
invisible-playwright fetch # scarica il motore se manca, verifica ogni copia
# in cache contro il sigillo, stampa il percorso
invisible-playwright version # versioni di wrapper, core e motore, e dove il
# motore è in cache
Documentazione, guide e confronti
Tutto si legge meglio, ed è ricercabile, in la wiki, organizzata in quattro sezioni invece di un unico elenco piatto:
- Documentazione - installazione, il passaggio di due righe da Playwright semplice, configurazione proxy/fuso orario, fissaggio di campi specifici, la CLI.
- Guide - come funziona realmente 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 dalla sorgente, e test.
- Confronti - contro Camoufox, Patchright, nodriver e playwright-stealth, e il caso per Firefox su Chromium in generale.
- Integrazioni - 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 rilevato è la mappa a cui la maggior parte delle altre pagine rimanda, Playwright rilevato come bot su un sito è l'ordine di risoluzione dei problemi, e navigator.webdriver non è l'indizio che pensi spiega la proprietà più famosa in questo ambito e perché patcharla da sola ti compra quasi nulla.
- crawl4ai stealth e motori browser personalizzati - browser_type accetta firefox ma non c'è executable_path; dove si trova la cucitura dell'adapter
- Perché i browser headless renderizzano font diversi - le tre cause, i set di font per piattaforma, e perché la soluzione non è installare più font
- Come far riportare a Linux e macOS font Windows reali - un manifesto, tre backend di font convinti a non chiedere all'host, e le quattro cuciture ancora aperte
- measureText e TextMetrics come superficie di fingerprinting - dieci o più numeri da una singola chiamata che non richiede prompt di autorizzazione, e i due errori che abbiamo commesso correggendolo
- Cosa fa davvero privacy.resistFingerprinting - e perché questo progetto lo imposta su false di proposito
- La variabile cdc_ di ChromeDriver - perché rinominarla non significa rimuoverla, e cosa questo generalizza
- Cosa controlla realmente bot.sannysoft.com - riga per riga, e il test canvas-in-iframe che nessuno legge
- Come CreepJS decide che stai mentendo - quattro tecniche di rilevamento, e perché bloccare la sonda è di per sé registrato
- Preferenze di Firefox che non fanno nulla in silenzio - cinque motivi, a partire da quello che ci è costato un vero bug
- Cosa rileva realmente BotD - venti rilevatori, e perché la maggior parte non riguarda affatto i bot
- Perché un ID visitatore FingerprintJS cambia - è un hash di 41 componenti, quindi se uno si muove, si muove tutto
Progetti correlati
I vicini open source, e a cosa serve ciascuno.
Sul lato Firefox
- Camoufox - un Firefox anti-detect che patch anche a livello C++. Copre una superficie più ampia e include un proprio database di fingerprint; questo progetto deriva un fingerprint da un seed con un campionatore bayesiano, quindi un numero riproduce una macchina. Confronto completo.
- LibreWolf - un fork di Firefox con impostazioni predefinite per la privacy. Include un binario configurato per chi naviga; questo include patch di sorgente più un wrapper di automazione.
- arkenfox/user.js - hardening di Firefox tramite preferenze. Dove una preferenza è sufficiente, usala; questo progetto patch il C++ dove una non lo è.
Sul lato Chromium
- Patchright - un fork di Playwright patchato, quindi il lavoro di stealth avviene nel driver piuttosto che nel binario del browser. Confronto completo.
- nodriver - il successore di
undetected-chromedriver, che guida Chrome direttamente su CDP e rimuove gli indizi in stile WebDriver. Confronto completo. - playwright-stealth - una patch init-script applicata prima del caricamento della pagina. Il suo stesso manutentore lo definisce una proof-of-concept; confronto completo.
- puppeteer-extra-plugin-stealth - l'originale di questa linea init-script, ancora ampiamente raccomandato. L'ultimo commit sostanziale del suo repository risale a metà 2024; cosa significa in pratica.
- selenium-stealth - lo stesso approccio su Selenium/CDP. L'ultimo commit del suo repository risale a dicembre 2021; cosa significa in pratica.
- pyppeteer - il port Python non ufficiale di Puppeteer. Il suo stesso README dice che non è mantenuto e rimanda a
playwright-python; cosa riguarda realmente quella raccomandazione. - rebrowser-patches - corregge la perdita CDP
Runtime.enablesu Chromium, convergendo in modo indipendente su una soluzione quasi identica a quella di Patchright. Confronto completo. - fingerprint-suite - genera un fingerprint coerente con una rete bayesiana, simile all'approccio di generazione di questo progetto, poi lo inietta in una pagina Playwright o Puppeteer su Chromium o Firefox. Confronto completo.
- playwright-with-fingerprints - inietta valori di fingerprint provenienti da un servizio remoto a pagamento, solo Windows, ancorato a una build specifica di Chromium. Confronto completo.
Quale di questi si adatta dipende dal livello in cui si trova il tuo problema, e dal fatto che tu abbia bisogno di Firefox o Chromium. Tre modi per rendere Playwright non rilevato analizza cosa ogni livello può e non può raggiungere, incluso cosa costa questo.
Se stai scegliendo tra motori piuttosto che tra strumenti, nota che una grande parte dei framework per agenti AI guida Chromium su CDP, il che decide la questione per te: Agenti browser AI e stealth.
Licenza
MIT - vedi LICENSE. Il binario Firefox patchato è distribuito sotto MPL-2.0 (licenza upstream di Firefox). Le patch C++ contro mozilla-central che producono quel binario sono in feder-cr/firefox_antidetect_patch.
Disclaimer
Questo progetto è solo a scopo educativo. È fornito così com'è, senza garanzie. Non mi assumo alcuna responsabilità per come viene utilizzato. Usalo a tuo rischio e in conformità con le leggi della tua giurisdizione.
Creato da Federico Elia