Neste tutorial do Playwright Stealth, falaremos sobre:
- O que é a detecção de bots e por que ela representa um problema para a Playwright.
- O que é o Playwright Stealth.
- Como usá-lo em Python e JavaScript para evitar ser bloqueado.
Vamos lá!
Detecção de bots como a maior limitação da Playwright
Playwright é uma das bibliotecas Python mais populares para automação de navegadores. Em detalhes, ela é confiável e amplamente utilizada porque é desenvolvida e mantida diretamente pela Microsoft. Sua API intuitiva e de alto nível facilita o controle de navegadores headless ou headed em diferentes linguagens de programação. Isso significa que a Playwright é uma ótima ferramenta para desenvolvimento de bots entre navegadores e plataformas, testes automatizados e web scraping.
Playwright é uma das bibliotecas Python mais populares para automação de navegadores. Em detalhes, ela é confiável e amplamente utilizada porque é desenvolvida e mantida diretamente pela Microsoft. Sua API intuitiva e de alto nível facilita o controle de navegadores headless ou headed em diferentes linguagens de programação. Isso significa que a Playwright é uma ótima ferramenta para desenvolvimento de bots entre navegadores e plataformas, testes automatizados e web scraping.
O principal problema com a biblioteca é que ela pode ser facilmente detectada e bloqueada por tecnologias antibot, especialmente ao usar navegadores no modo headless. Como isso é possível? Bem, a Playwright altera automaticamente o valor de propriedades e cabeçalhos especiais ao controlar navegadores headless. Por exemplo, ela define a configuração navigator.webdriver
do Chrome como true
.
As soluções de detecção de bots estão cientes dessas configurações e as analisam para verificar se o usuário atual é humano ou um bot. Quando esses mecanismos detectam qualquer configuração suspeita, eles categorizam o usuário como um bot e o bloqueiam imediatamente.
Por exemplo, considere este teste de detecção de bots para o modo headless. Visite a página em seu navegador e você verá:
Perfeito, esse é o resultado que se esperaria!
Agora, tente visitar a mesma página na Playwright com a configuração padrão e extraia a resposta da página:
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
# launch the browser
browser = await p.chromium.launch()
# open a new page
page = await browser.new_page()
# visit the target page
await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")
# extract the answer contained on the page
answer_element = page.locator("#res")
answer = await answer_element.text_content()
# print the resulting answer
print(f'The result is: "{answer}"')
# close the browser and release its resources
await browser.close()
asyncio.run(main())
Execute o programa Python, e ele mostrará:
The result is: "You are Chrome headless"
Isso significa que a página de teste de automação de bots conseguiu detectar a solicitação feita pelo seu script automatizado como proveniente de um navegador headless.
Em outras palavras, a Playwright é uma ferramenta limitada que pode ser facilmente interrompida por tecnologias de detecção de bots. Para evitar isso, você pode substituir manualmente as configurações padrão e esperar o sucesso. Caso contrário, instale o plugin Playwright Stealth!
Plugin Playwright Stealth: o que é e como funciona
playwright-stealth
é um pacote Python que estende a Playwright substituindo configurações específicas para evitar a detecção de bots. O Playwright Stealth é uma versão do pacote npm puppeteer-extra-plugin-stealth
, que usa módulos de evasão integrados para evitar vazamentos e alterar propriedades que expõem navegadores automatizados como bots. Por exemplo, ele exclui a propriedade navigator.webdriver
e remove “headlessChrome” do cabeçalho User-Agent definido pelo Chrome no modo headless por padrão.
O objetivo do plugin Stealth é permitir que uma instância automatizada de navegador headless passe com êxito em todos os testes de detecção de bots em sannysoft.com. No momento em que este artigo foi escrito, esse objetivo foi atingido. No entanto, conforme mencionado na documentação oficial, ainda existem métodos para detectar navegadores headless. Então, o que funciona hoje, pode não funcionar amanhã. Ignorar todos os mecanismos de detecção de bots não é totalmente possível, mas a biblioteca visa tornar esse processo o mais desafiador possível.
Como usar o Playwright Stealth para evitar a detecção de bots
Siga as etapas abaixo para aprender como integrar o Playwright Stealth a um script da Playwright
em Python para evitar ser bloqueado.
Etapa 1: configurar um projeto da Playwright em Python
Aviso: se você já tem implementado um projeto em Python da Playwright
, pode pular esta etapa.
Primeiro, certifique-se de ter o Python 3 instalado em sua máquina. Caso contrário, baixe o instalador, execute-o e siga o assistente de instalação.
Em seguida, use os comandos abaixo para configurar um projeto em Python chamado playwright-demo
:
mkdir playwright-demo
cd playwright-demo
Esses comandos criam a pasta playwright-demo
e a inserem no terminal.
Inicialize um ambiente virtual Python e ative-o:
python -m venv env
env/Scripts/activate
Execute o seguinte comando para instalar a Playwright:
pip install playwright
Isso vai demorar um pouco, então seja paciente.
Depois disso, instale os navegadores necessários com:
playwright install
Abra a pasta do projeto no IDE para Python de sua escolha e crie um arquivo index.py
. Inicialize-o com as seguintes linhas:
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
# browser automation logic...
await browser.close()
asyncio.run(main())
O script acima inicia uma instância do Chromium no modo headless, abre uma nova página e finalmente fecha o navegador. É assim que fica um script básico da Playwright em Python.
Para executá-lo, digite:
python index.py
Perfeito, agora você tem um projeto da Playwright pronto para ser estendido com o Stealth Plugin!
Etapa 2: instalar e usar o Stealth Plugin
Instale o plugin do Playwright Stealth com:
pip install playwright-stealth
Abra seu arquivo index.py
e adicione a importação abaixo ao seu script da Playwright:
from playwright_stealth import stealth_async
Ou, se você estiver usando a API de sincronização:
from playwright_stealth import stealth_sync
Para registrá-lo na Playwright, passe o objeto page
para a função importada da seguinte forma:
await stealth_async(page)
Ou, se você estiver usando a API de sincronização:
stealth_async(page)
A função stealth_async()
estenderá page
substituindo algumas configurações padrão para evitar a detecção de bots.
Fantástico! Só resta visitar a página-alvo e repetir o teste.
Etapa 3: juntar tudo
Integre o plugin Stealth ao script da Playwright apresentado no início do artigo:
import asyncio
from playwright.async_api import async_playwright
from playwright_stealth import stealth_async
async def main():
async with async_playwright() as p:
# launch the browser
browser = await p.chromium.launch()
# open a new page
page = await browser.new_page()
# register the Playwright Stealth plugin
await stealth_async(page)
# visit the target page
await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")
# extract the message contained on the page
message_element = page.locator("#res")
message = await message_element.text_content()
# print the resulting message
print(f'The result is: "{message}"')
# close the browser and release its resources
await browser.close()
asyncio.run(main())
Execute novamente, e desta vez ele gerará:
The result is: "You are not Chrome headless"
E pronto! A página-alvo, com recursos de detecção de bots, não será mais capaz de sinalizar seu script automatizado da Playwright como um bot.
Muito bem! Agora você domina a arte do Playwright Stealth, e nenhuma tecnologia de detecção de bots pode voltar a te intimidar.
Extra: Playwright Stealth em JavaScript
Se você é usuário da Playwright em JavaScript e quer obter o mesmo resultado, você precisa usar o pacote npm puppeteer-extra-plugin-stealth
. Isso funciona tanto com Puppeteer Extra quanto com Playwright Extra. Se você não estiver familiarizado com esses projetos, eles são essencialmente versões aprimoradas das duas bibliotecas de automação de navegadores. Especificamente, eles adicionam funcionalidade de extensão por meio de plugins à Puppeteer e à Playwright, respectivamente.
Portanto, suponha que você tenha o seguinte script da Playwright em JavaScript e queira integrá-lo ao Stealth Plugin:
import { chromium } from "playwright"
(async () => {
// set up the browser and launch it
const browser = await chromium.launch()
// open a new blank page
const page = await browser.newPage()
// navigate the page to the target page
await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")
// extract the message contained on the page
const messageElement = page.locator('#res')
const message = await messageElement.textContent()
// print the resulting message
console.log(`The result is: "${message}"`)
// close the browser and release its resources
await browser.close()
})()
Primeiro, instale o playwright-extra
e o puppeteer-extra-plugin-stealth
:
npm install playwright-extra puppeteer-extra-plugin-stealth
Em seguida, importe o chromium
de playwright-extra
em vez de playwright
e importe o StealthPlugin
de puppeteer-extra-plugin-stealth
:
import { chromium } from "playwright-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"
Em seguida, registre o Stealth Plugin com:
chromium.use(StealthPlugin())
Junte tudo e você terá:
import { chromium } from "playwright-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"
(async () => {
// configure the Stealth plugin
chromium.use(StealthPlugin())
// set up the browser and launch it
const browser = await chromium.launch()
// open a new blank page
const page = await browser.newPage()
// navigate the page to the target page
await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")
// extract the message contained on the page
const messageElement = page.locator('#res')
const message = await messageElement.textContent()
// print the resulting message
console.log(`The result is: "${message}"`)
// close the browser and release its resources
await browser.close()
})()
Formidável! Você acaba de integrar o Stealth Plugin à Playwright em JavaScript.
Conclusão
Neste guia, você entendeu por que a detecção de bots representa um desafio para a Playwright e como lidar com isso. Graças à biblioteca Python Playwright Stealth, você pode aprimorar a configuração padrão do navegador para evitar a detecção de bots. Como provado aqui, uma abordagem similar também pode ser aplicada em JavaScript.
Independentemente da sofisticação do script de automação do seu navegador na Playwright, os sistemas avançados de detecção de bots ainda representarão um problema. Embora você possa considerar usar outro pacote de automação de navegador, a causa-raiz da detecção está no navegador, não na biblioteca em si. A solução está em um navegador escalável com funcionalidade para contornar os antibots, que se integra perfeitamente a qualquer biblioteca de automação de navegador. Esse navegador existe e é conhecido como Scraping Browser!
O Scraping Browser da Bright Data é um navegador baseado em nuvem altamente escalável compatível com Playwright, Puppeteer e Selenium. Ele rotaciona automaticamente o IP de saída em cada solicitação e pode lidar com impressões digitais do navegador, novas tentativas automáticas e resolução de CAPTCHAs para você. Esses recursos são possíveis por meio das funcionalidades de desbloqueio baseadas em proxy nas quais ele se baseia.
Os proxies da Bright Data são usados por empresas da Fortune 500 e mais de 20 000 clientes. Essa rede mundial confiável de proxies envolve: