Voltar às atualizações
New releaseAug 31, 2026

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.

Compartilhar
invisible_playwright

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.

invisible_playwright - 5/5 suites de deteção aprovadas

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.

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

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.


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  LinkedIn

tests License: MIT Python 3.11+ Firefox 151.0 GitHub stars

Categorias