
invisible_playwright v0.7.2
Stealth de navegador anti-detecção gratuito para Playwright: fingerprint de Firefox headless indetectável. Raspagem com Python, bypass de recaptcha e detecção de bots. Código aberto.
Stealth de navegador antidetecção gratuito para Playwright: impressão digital Firefox não detetada, headless ou com interface.
Web scraping em Python e bypass de captcha. Open source, e passa em todos os testes de deteção de bots.

Como funciona
Os anti-bots fazem duas perguntas, e o reCAPTCHA, hCaptcha e Cloudflare Turnstile avaliam as respostas. O invisible_playwright responde sim a ambas.
1. Isto é um navegador real? Sim. É Firefox, corrigido ao nível do código-fonte em C++.
- A impressão digital do navegador é definida dentro do motor, não injetada na página: navigator, ecrã, GPU/WebGL, canvas, fontes, áudio, WebRTC, fuso horário, rede. Headless ou com interface, os mesmos valores em ambos os casos.
- Sem shim de JS, sem override, sem costura para ler.
2. Está uma pessoa real a usá-lo? Sim. As ações são humanizadas no driver.
- Cada clique, hover e arrasto segue um percurso natural do rato com temporização humana, sem cursor a teletransportar-se.
- Cada entrada é byte-idêntica a um rato real: fonte de entrada real, pressão, eventos de confiança.
Conduzido pela API padrão do Playwright. Análise completa: feder-cr/firefox_antidetect_patch.
Ainda vê captchas ou anti-bot? É o proxy.
Uma vez tratado o navegador, ele deixa de ser a variável. Se ainda está a ser desafiado, o indício já não é o navegador, é o IP de onde vem. Cerca de 90% dos proxies são públicos: qualquer pessoa pode alugar o mesmo endereço, por isso já é conhecido e consta nas listas de IPs bloqueados que os sites consultam. Um navegador perfeito num IP conhecido continua a perder.
Instalação
pip install invisible-playwright
python -m invisible_playwright fetch # download único de ~238 MB (~544 MB descompactado), verificado por sha256
Plataformas suportadas: Windows x86_64, Linux x86_64 / arm64. macOS já não é suportado (os lançamentos pararam no firefox-20); num Mac, o pacote recusa-se a iniciar com uma mensagem clara em vez de descarregar um binário que já não existe.
Utilização
Impressão digital aleatória por sessão
100% compatível com Playwright - síncrono e assíncrono, todos os métodos, zero alterações de API. Se já usa Playwright, a mudança são duas linhas:
- 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:
Cada sessão obtém uma impressão digital distinta (GPU, áudio, fontes, ecrã, ~200 campos) e movimento do rato em curva de Bézier.
Síncrono
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") # o rato arqueia até ao botão numa curva de Bézier
Assíncrono
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")
O objeto browser é um playwright.sync_api.Browser / playwright.async_api.Browser - todos os métodos do Playwright funcionam tal como estão.
Registe a seed para reproduzir uma execução:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
Impressão digital reproduzível
with InvisiblePlaywright(seed=42) as browser:
... # mesma GPU, mesmo hash de canvas, mesmo contexto de áudio, em todas as execuções
Proxies
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
Esquemas suportados: socks5, socks4, http, https. O DNS é encaminhado através do proxy por predefinição, sem fuga local.
Fuso horário
O fuso horário do navegador segue timezone=:
# predefinição: o fuso horário é derivado automaticamente do IP de saída (saída do proxy se
# um proxy estiver definido, caso contrário o IP público do próprio host)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# zona IANA explícita tem sempre prioridade, a única forma de forçar uma zona específica
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
Fixar campos específicos da impressão digital
Por predefinição, tudo vem de seed. Para forçar valores específicos enquanto o resto permanece derivado da 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:
...
A lista completa de chaves fixáveis, como a fixação interage com o amostrador bayesiano, e padrões comuns estão em docs/pinning.md.
CLI
O comando instalado é invisible-playwright, com hífen. python -m invisible_playwright funciona de forma idêntica e não precisa de nada no PATH.
invisible-playwright fetch # descarrega o motor se estiver em falta, verifica cada um em cache
# contra o selo, imprime o caminho
invisible-playwright version # versões do wrapper, núcleo e motor, e onde o
# motor está em cache
Documentação, guias e comparações
Tudo isto se lê melhor, e é pesquisável, em a wiki, organizado em quatro secções em vez de uma única lista plana:
- Documentação - instalação, a mudança de duas linhas a partir do Playwright simples, configuração de proxy/fuso horário, fixação de campos específicos, a CLI.
- Guias - como a deteção funciona realmente, em sete grupos: identidade do navegador, canvas/WebGL/fontes/ áudio, rede e WebRTC, a camada de automação, agentes de IA, os próprios detetores explicados a partir do código-fonte, e testes.
- Comparações - contra Camoufox, Patchright, nodriver e playwright-stealth, e o caso para Firefox em vez de Chromium em geral.
- Integrações - Scrapy, Crawlee, Robot Framework, CodeceptJS, executores de testes, Playwright MCP, e os frameworks em que não se encaixa, pelo nome.
Se não sabe por onde começar: Três formas de tornar o Playwright não detetado é o mapa para o qual a maioria das outras páginas aponta, Playwright detetado como bot num site é a ordem de resolução de problemas, e navigator.webdriver não é o indício que pensa que é explica a propriedade mais famosa neste espaço e porque corrigi-la sozinha quase não lhe dá nada.
- crawl4ai stealth e motores de navegador personalizados - browser_type aceita firefox mas não há executable_path; onde está a costura do adaptador
- Porque os navegadores headless renderizam fontes diferentes - as três causas, os conjuntos de fontes por plataforma, e porque a correção não é instalar mais fontes
- Como fazer Linux e macOS reportar fontes Windows reais - um manifesto, três backends de fontes convencidos a não perguntar ao host, e as quatro costuras ainda abertas
- measureText e TextMetrics como superfície de fingerprinting - mais de dez números de uma única chamada sem precisar de pedido de permissão, e os dois erros que cometemos ao corrigi-lo
- O que privacy.resistFingerprinting realmente faz - e porque este projeto o define como false de propósito
- A variável cdc_ do ChromeDriver - porque renomeá-la não é removê-la, e o que isso generaliza
- O que bot.sannysoft.com realmente verifica - linha por linha, e o teste de canvas-em-iframe que ninguém lê
- Como o CreepJS decide que está a mentir - quatro técnicas de deteção, e porque bloquear a sonda é em si registado
- Preferências do Firefox que silenciosamente não fazem nada - cinco razões, começando pela que nos custou um bug real
- O que o BotD realmente deteta - vinte detetores, e porque a maioria não é sobre bots de todo
- Porque um ID de visitante do FingerprintJS muda - é um hash de 41 componentes, por isso um a mover-se move tudo
Projetos relacionados
Os vizinhos open source, e para que serve cada um.
Do lado do Firefox
- Camoufox - um Firefox anti-deteção que também corrige ao nível do C++. Cobre uma superfície mais ampla e traz a sua própria base de dados de impressões digitais; este projeto deriva uma impressão digital de uma seed com um amostrador bayesiano, por isso um número reproduz uma máquina. Comparação completa.
- LibreWolf - um fork do Firefox com predefinições de privacidade. Distribui um binário configurado para as pessoas navegarem; este distribui patches de código-fonte mais um wrapper de automação.
- arkenfox/user.js - endurecimento do Firefox através de preferências. Onde uma preferência é suficiente, use-a; este projeto corrige C++ onde uma não é.
Do lado do Chromium
- Patchright - um fork corrigido do Playwright, por isso o trabalho de stealth fica no driver em vez de no binário do navegador. Comparação completa.
- nodriver - o sucessor de
undetected-chromedriver, conduzindo o Chrome diretamente sobre CDP e removendo os indícios com sabor a WebDriver. Comparação completa. - playwright-stealth - um patch de script de inicialização aplicado antes de a página carregar. O seu próprio mantenedor chama-lhe uma prova de conceito; comparação completa.
- puppeteer-extra-plugin-stealth - o original desta linhagem de scripts de inicialização, ainda amplamente recomendado. O último commit substantivo do seu repositório é de meados de 2024; o que isso significa na prática.
- selenium-stealth - a mesma abordagem em Selenium/CDP. O último commit do seu repositório é de dezembro de 2021; o que isso significa na prática.
- pyppeteer - o port Python não oficial do Puppeteer. O seu próprio README diz que está sem manutenção e aponta para
playwright-pythonem vez disso; sobre o que é realmente essa recomendação. - rebrowser-patches - corrige a fuga CDP
Runtime.enableno Chromium, convergindo independentemente para quase a mesma correção que o Patchright usa. Comparação completa. - fingerprint-suite - gera uma impressão digital coerente com uma rede bayesiana, próxima da abordagem de geração deste próprio projeto, e depois injeta-a numa página Playwright ou Puppeteer em Chromium ou Firefox. Comparação completa.
- playwright-with-fingerprints - injeta valores de impressão digital provenientes de um serviço pago remoto, apenas Windows, fixado a uma build específica de Chromium. Comparação completa.
Qual destes se adequa depende da camada em que o seu problema está, e de se precisa de Firefox ou Chromium. Três formas de tornar o Playwright não detetado percorre o que cada camada pode e não pode alcançar, incluindo o que esta custa.
Se está a escolher entre motores em vez de ferramentas, note que uma grande parte dos frameworks de agentes de IA conduz Chromium sobre CDP, o que decide a questão por si: Agentes de navegador de IA e stealth.
Licença
MIT - ver LICENSE. O binário Firefox corrigido é distribuído sob a MPL-2.0 (licença upstream do Firefox). Os patches C++ contra mozilla-central que produzem esse binário estão em feder-cr/firefox_antidetect_patch.
Aviso legal
Este projeto é apenas para fins educacionais. É fornecido tal como está, sem quaisquer garantias. Não assumo qualquer responsabilidade pela forma como é utilizado. Use-o por sua conta e risco e em conformidade com as leis da sua jurisdição.
Construído por Federico Elia