Evite a Detecção de Bots com Playwright Stealth: 9 Soluções para 2026
Expert Network Defense Engineer
TL;DR:
- Desvios de impressões digitais do Playwright. Instâncias padrão do Chromium headless transmitem sinais de automação como
navigator.webdriver, plugins ausentes e tamanhos de viewport previsíveis. - Ecossistemas Python e Node.js diferem. Use
playwright-stealthem Python (com o gerenciador de contexto v2.x) eplaywright-extraem Node.js para corrigir esses desvios. - O Stealth exige múltiplas camadas. Contornar a detecção moderna requer corrigir a camada JavaScript, randomizar cabeçalhos, girar proxies e gerenciar cookies de sessão simultaneamente.
- Browsers em nuvem cuidam do resto. Quando plugins locais de stealth falham contra WAFs avançados, descarregar a execução do navegador para uma infraestrutura gerenciada é o único caminho de atualização confiável.
- Gratuito para começar. Novas contas Scrapeless incluem tempo de execução gratuito do Scraping Browser — inscreva-se em app.scrapeless.com.
Introdução: os limites da automação padrão
O Playwright é uma poderosa ferramenta de automação de navegadores, mas fora da caixa, ele se anuncia como um bot. Quando você inicia uma instância do Chromium headless, ela carrega marcadores específicos — como a flag navigator.webdriver definida como true, a falta de plugins de navegador padrão e assinaturas WebGL distintas. Sistemas modernos de anti-bot, como o Cloudflare, DataDome e Akamai, leem esses sinais e bloqueiam a solicitação antes que seu script consiga até mesmo analisar o DOM.
Para raspar sites protegidos, você precisa do stealth do Playwright. No entanto, o "modo stealth" não é um botão embutido que você possa ativar na biblioteca Playwright. É necessário implementar técnicas específicas para corrigir vazamentos de impressões digitais do navegador, gerenciar características de rede e emular o comportamento humano.
Este guia detalha 9 soluções práticas para evitar a detecção de bots com o Playwright em 2025, fornecendo exemplos de código detalhados para ajudá-lo a navegar pelas complexidades da raspagem da web moderna.
O Que Você Pode Fazer Com Isso
- Contornar a detecção básica de bots. Acesse sites que bloqueiam navegadores headless padrão corrigindo vazamentos de
navigator.webdrivere User-Agent. - Padronizar impressões digitais do navegador. Injetar dados realistas de concorrência de hardware, memória e plugins em sua instância do Chromium headless.
- Manter a persistência de sessões. Combinar correções de stealth com gerenciamento adequado de cookies e contexto para manter as sessões ativas por mais tempo.
- Dimensionar a extração de dados. Executar contextos de navegador paralelos e com stealth para tarefas de raspagem em alto volume.
Por Que o Scrapeless Scraping Browser
O Scrapeless Scraping Browser é um navegador em nuvem personalizável e anti-deteção, projetado para crawlers da web e agentes de IA. Quando plugins locais de stealth atingem seus limites contra WAFs avançados, ele oferece:
- Anti-deteção embutido. Falsificação nativa de impressões digitais que vai além de patches JavaScript, incluindo gerenciamento de impressões digitais TLS e TCP.
- Rotação automática de proxies. Proxies residenciais integrados em mais de 195 países para resolver problemas de reputação de IP.
- Solução gerenciada de desafios. Resolução automática de Cloudflare Turnstile, reCAPTCHA e hCaptcha.
- Compatibilidade com Playwright. Conecte seus scripts Playwright existentes ao navegador em nuvem via CDP com uma única linha de código.
Obtenha sua chave API no plano gratuito em app.scrapeless.com.
Pré-requisitos
- Node.js 18+ ou Python 3.10+
- Uma conta Scrapeless e chave API — inscreva-se em app.scrapeless.com
- Familiaridade básica com automação Playwright
9 Soluções para Evitar a Detecção de Bots com Playwright Stealth
1. Desativar a Flag navigator.webdriver
Um dos indicadores mais comuns de automação é a propriedade navigator.webdriver, que é definida como true em ambientes de navegador automatizados. O padrão W3C WebDriver define essa flag especificamente para permitir que servidores identifiquem o tráfego automatizado. Os sites podem facilmente verificar essa flag para identificar bots. Desativá-la é uma técnica fundamental de stealth.
Passos da Operação de Código:
Use page.add_init_script() para injetar JavaScript que modifica a propriedade navigator.webdriver antes que quaisquer scripts do site sejam executados:
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context()
# Injetar JavaScript para desativar a flag webdriver
context.add_init_script("""
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
""")
page = context.new_page()
page.goto("https://bot.sannysoft.com/")
page.screenshot(path="webdriver_disabled.png")
browser.close()
2. Randomizar Strings de User-Agent
O cabeçalho User-Agent identifica o navegador e o sistema operacional para o servidor web. Usar um User-Agent consistente ou desatualizado (especialmente um que contenha HeadlessChrome) é um forte indicador de um bot. Randomizar as strings do User-Agent ajuda a parecer diferentes usuários legítimos.
Etapas de Operação do Código:
Mantenha uma lista de strings User-Agent comuns e selecione uma aleatoriamente para cada sessão:
python
from playwright.sync_api import sync_playwright
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0"
]
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context(user_agent=random.choice(user_agents))
page = context.new_page()
page.goto("https://www.whatismybrowser.com/detect/what-is-my-user-agent")
page.screenshot(path="random_user_agent.png")
browser.close()
3. Use Proxies e Rotacione Endereços IP
Solicitações repetidas do mesmo endereço IP são um indicador principal de atividade de bot. Usar um pool de proxies e rotacionar endereços IP para cada solicitação ou sessão distribui seu tráfego e evita bloqueios baseados em IP.
Etapas de Operação do Código:
Configure o Playwright para usar um proxy:
python
from playwright.sync_api import sync_playwright
import random
proxies = [
"http://user1:pass1@proxy1.example.com:8080",
"http://user2:pass2@proxy2.example.com:8080"
]
with sync_playwright() as p:
# Lançar navegador com um proxy selecionado aleatoriamente
browser = p.chromium.launch(headless=True, proxy={
"server": random.choice(proxies)
})
page = browser.new_page()
page.goto("https://www.whatismyip.com/")
browser.close()
Para operações em grande escala, considere usar um serviço de proxy gerenciado como Scrapeless Proxies que lida com a rotação automaticamente.
4. Simule Movimentos de Mouse e Entradas de Teclado Realistas
Bots frequentemente interagem com elementos da web diretamente e instantaneamente, o que é antinatural. Sistemas anti-bot rastreiam biometricos comportamentais como velocidade do cursor e cadência de digitação. Simular movimentos de mouse, cliques e entradas de teclado semelhantes aos humanos reduz as chances de detecção.
Etapas de Operação do Código:
Use os métodos page.mouse e page.keyboard para introduzir atrasos e caminhos realistas:
python
from playwright.sync_api import sync_playwright
import time
import random
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.example.com")
# Simular digitação semelhante à humana
search_input = page.locator("#search-box")
search_input.click()
text_to_type = "Playwright Stealth"
for char in text_to_type:
page.keyboard.type(char)
time.sleep(random.uniform(0.05, 0.2)) # Atraso aleatório entre pressionamentos de tecla
page.keyboard.press("Enter")
browser.close()
5. Gerencie Cookies e Dados de Sessão
Os sites usam cookies para rastrear sessões de usuários. Bots que descartam cookies entre solicitações são facilmente identificados como tráfego automatizado. Manter uma sessão consistente aceitando e enviando cookies é vital para a furtividade.
Etapas de Operação do Código:
Use context.storage_state() para salvar cookies e armazenamento local, e depois carregá-los em novas sessões:
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
# Cenário 1: Salvar cookies da sessão atual para uso futuro
context = browser.new_context()
page = context.new_page()
page.goto("https://www.example.com/login")
# Realizar login...
# Salvar estado
context.storage_state(path="state.json")
browser.close()
# Cenário 2: Carregar cookies de uma sessão anterior
browser2 = p.chromium.launch(headless=True)
context2 = browser2.new_context(storage_state="state.json")
page2 = context2.new_page()
page2.goto("https://www.example.com/dashboard")
browser2.close()
6. Ajuste o Tamanho da Janela e a Emulação de Dispositivos
Os sites verificam o tamanho da janela e a resolução da tela para detectar anomalias. Usar uma janela de 800x600 é um sinal de alerta comum. Emular configurações de dispositivos comuns ajuda a se misturar com o tráfego real de usuários.
Etapas de Operação do Código:
Defina viewport e user_agent ao criar um novo contexto:
python
from playwright.sync_api import sync_playwright
import random
viewports = [
{"width": 1920, "height": 1080}, # Desktop
{"largura": 1366, "altura": 768}, # Laptop
]
com sync_playwright() como p:
navegador = p.chromium.launch(headless=True)
viewport_selecionado = random.choice(viewports)
contexto = navegador.new_context(
viewport=viewport_selecionado
)
pagina = contexto.new_page()
pagina.goto("https://www.deviceinfo.me/")
navegador.close()
### 7. Evitar a Detecção do Modo Headless
Embora o modo headless seja eficiente, alguns sistemas anti-bot podem detectá-lo verificando a falta de capacidades de renderização gráfica. Executar o Playwright em modo headful (com uma interface visível do navegador) pode, às vezes, contornar a detecção, especialmente em sistemas mais agressivos.
**Passos de Operação do Código:**
Defina `headless=False` ao iniciar o navegador:
```python
from playwright.sync_api import sync_playwright
com sync_playwright() como p:
navegador = p.chromium.launch(headless=False) # Iniciar em modo headful
pagina = navegador.new_page()
pagina.goto("https://www.example.com")
navegador.close()
8. Usar playwright-stealth e playwright-extra
Em vez de escrever injeções de JavaScript manuais, use pacotes de stealth dedicados. O ecossistema Python usa playwright-stealth, enquanto o Node.js usa playwright-extra combinado com puppeteer-extra-plugin-stealth. Essas bibliotecas aplicam automaticamente um conjunto de evasões para corrigir a impressão digital do navegador.
Passos de Operação do Código (Python):
Instale o pacote (pip install playwright-stealth) e use o API do gerenciador de contexto v2.x:
python
import asyncio
from playwright_stealth import Stealth
from playwright.async_api import async_playwright
async def main():
# O gerenciador de contexto aplica patchs de stealth automaticamente
async with Stealth().use_async(async_playwright()) como playwright:
navegador = await playwright.chromium.launch(headless=True)
contexto = await navegador.new_context()
pagina = await contexto.new_page()
await pagina.goto("https://bot.sannysoft.com/")
await navegador.close()
asyncio.run(main())
9. Implementar Atrasos e Aleatoriedade nas Ações
Bots frequentemente executam ações com temporização e velocidade perfeitas. Introduzir atrasos aleatórios entre ações e variar a velocidade das interações faz com que o script pareça mais humano.
Passos de Operação do Código:
Use time.sleep() com intervalos aleatórios:
python
from playwright.sync_api import sync_playwright
import time
import random
com sync_playwright() como p:
navegador = p.chromium.launch(headless=True)
pagina = navegador.new_page()
pagina.goto("https://www.example.com")
# Simular navegação com atrasos aleatórios
time.sleep(random.uniform(2, 5)) # Atraso inicial no carregamento da página
pagina.click("a[href='/products']")
pagina.locator("input[name='q']").fill("item de busca")
time.sleep(random.uniform(0.5, 1.5)) # Atraso após digitar
pagina.keyboard.press("Enter")
navegador.close()
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Conclusão: além do stealth básico
Os plugins de stealth do Playwright e os ajustes comportamentais são essenciais para scraping básico da web, mas têm limites difíceis. Eles operam na camada JavaScript, o que significa que não podem simular impressões digitais TLS, tamanhos de janela TCP ou resolver desafios comportamentais complexos como o Turnstile do Cloudflare.
Quando seu navegador com patch de stealth local começa a receber erros 403 ou loops de CAPTCHA, a solução não é escrever mais evasões de JavaScript. A solução é transferir a execução do navegador para uma infraestrutura gerenciada, como o Scrapeless Scraping Browser, que lida automaticamente com rotação de IP, impressão digital TLS e resolução de desafios, permitindo que você mantenha seu código Playwright.
Pronto para Construir Seu Pipeline de Dados com IA?
Junte-se à comunidade de desenvolvedores que estão construindo sistemas robustos de extração de dados.
- Discord: https://discord.gg/VU2vtbq7Q2
- Telegram: https://t.me/scrapeless
- Inscreva-se: app.scrapeless.com
FAQ
Q: O Playwright stealth está integrado à biblioteca?
Não. O Playwright não tem um modo stealth nativo. Você deve usar pacotes de terceiros: playwright-stealth para Python ou playwright-extra com o plugin de stealth para Node.js.
Q: Os plugins de stealth contornam o Cloudflare?
Os plugins de stealth corrigem vazamentos básicos de impressão digital do navegador, o que ajuda contra verificações simples. No entanto, eles não resolvem desafios avançados do Cloudflare (como o Turnstile) ou problemas de reputação de IP.
Q: O stealth do Playwright funciona com Firefox ou WebKit?
Não. Os módulos de evasão nos pacotes stealth de Python e Node.js são especificamente projetados para atualizar as APIs do Chromium. Eles não suportam Firefox ou WebKit.
P: Eu ainda preciso de proxies se usar stealth?
Sim. Os plugins stealth apenas mascaram a identidade do navegador (a impressão digital). Eles não ocultam seu endereço IP. Você ainda precisa de proxies residenciais para evitar limites de taxa e bloqueios baseados em IP.
P: É legal fazer scraping com Playwright?
Fazer scraping de dados visíveis publicamente é geralmente permissível, embora as jurisdições variem. Revise os Termos de Serviço do site-alvo e consulte um advogado sobre seu caso de uso específico.
P: Isso pode funcionar sem um agente de IA?
Sim, o código do Playwright funciona de ponta a ponta como scripts de automação padrão. Nenhum agente de IA é necessário para implementar a evasão do navegador.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



