Voltar às atualizações
New releaseSep 18, 2026

invisible_playwright v0.20.0

Playwright que os anti-bots não conseguem ver, portanto sem captchas: mesma API, Firefox headless furtivo anti-detecção, impressão digital indetectável, contorno de detecção de bots, web scraping em Python e automação de navegador.

Compartilhar
invisible_playwright

O Playwright é detectado por anti-bots e captchas.
Este aqui roda em um Firefox anti-detect com uma fingerprint indetectável, compatível com o seu código Playwright existente.

invisible_playwright - 5/5 detection suites passed

Como funciona

Os anti-bots fazem duas perguntas, e o reCAPTCHA, o hCaptcha e o Cloudflare Turnstile pontuam as respostas. O invisible_playwright responde sim às duas.

1. Este é um navegador real? Sim. É o Firefox, com patches no nível do código-fonte C++.

  • A fingerprint do navegador é definida dentro da engine, não injetada na página: navigator, screen, GPU/WebGL, canvas, fontes, áudio, WebRTC, fuso horário, rede. Headless ou headed, os mesmos valores nos dois casos.
  • Sem shim em JS, sem override, sem costura para ser lida.

2. Uma pessoa real está usando? Sim. As ações são humanizadas no driver.

  • Cada clique, hover e arrasto segue um caminho natural de mouse com timing humano, sem cursor teletransportando.
  • Cada entrada é byte a byte idêntica à de um mouse real: fonte de entrada real, pressão, eventos confiáveis.

Instalação

pip install invisible-playwright
python -m invisible_playwright fetch      # one-time download, sha256-verified: 240 MB (Windows) / 262 MB (Linux x86_64) / 253 MB (Linux arm64), about 550 MB unpacked

Requer Python 3.11 ou mais recente.

Plataformas suportadas: Windows x86_64, Linux x86_64 / arm64.


Uso

Fingerprint aleatória por sessão

A API do Playwright, sync e async, sem mudanças no código. Os mesmos objetos, as mesmas chamadas, os mesmos valores de retorno. Algumas superfícies estão fora do escopo - tracing, HAR, CDP, o contexto de requisição da API - e cada uma delas recusa com uma frase dizendo o motivo em vez de se comportar mal silenciosamente. Se você já usa Playwright, a troca é de 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 recebe uma fingerprint distinta (GPU, áudio, fontes, tela, ~200 campos) e movimento de mouse em curva de Bezier.

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")   # mouse arcs to the button on a Bezier curve

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")

O objeto browser é um playwright.sync_api.Browser / playwright.async_api.Browser - todo método do Playwright funciona como está.

Registre a seed para reproduzir uma execução:

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

Fingerprint reproduzível

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

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 é roteado pelo proxy por padrão, sem vazamento local.

Fuso horário

O fuso horário do navegador segue timezone=:

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

Fixando campos específicos da fingerprint

Por padrão, tudo vem da seed. Para forçar valores específicos enquanto o resto permanece derivado da seed:

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

Um pin de GPU escolhe uma das personas validadas em vez de definir uma string livre, porque os ~81 valores de getParameter e a lista de extensões acompanham o nome do renderer e um detector faz verificação cruzada com ele. Um nome que o pool não contém gera erro, e o erro lista os que ele contém.

A lista completa de chaves fixáveis, como o pinning 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    # 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

Documentação, guias e comparações

Se você prefere prompt a script. Esta página é a engine, como uma biblioteca Python. Duas formas de usá-la sem escrever código, ambas em uma linha: a partir de um cliente MCP que você já tem (Claude Code, Claude Desktop, Cursor), claude mcp add stealth -- uvx aihawk, veja a página do servidor MCP; ou com uma interface e um modelo incluídos, precisando apenas de uma chave OpenRouter, uvx aihawk ui --openrouter-key sk-or-..., veja AIHawk. A mesma engine por baixo, e a segunda é um cliente da primeira.

Tudo isso se lê melhor, e é pesquisável, na wiki, organizada em quatro seções em vez de uma lista única:

  • Documentação - instalação, a troca de duas linhas do Playwright puro, configuração de proxy/fuso horário, fixação de campos específicos, a CLI.
  • Guias - como a detecção realmente funciona, em sete grupos: identidade do navegador, canvas/WebGL/fontes/ áudio, rede e WebRTC, a camada de automação, agentes de IA, os próprios detectores explicados a partir do código-fonte, e testes.
  • Comparações - contra Camoufox, Patchright, nodriver e playwright-stealth, e o argumento a favor do Firefox em vez do Chromium em geral.
  • Integrações - Scrapy, Crawlee, Robot Framework, CodeceptJS, test runners, Playwright MCP, e os frameworks nos quais não se encaixa, por nome.

Categorias