Evite a detecção de bots com o Playwright Stealth

Contorne a detecção de bots com o plugin Playwright Stealth. Nosso guia rápido mostra como integrar o Stealth em seus scripts da Playwright, mantendo sua automação da web fluida e indetectável.
10 min read

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

Página web exibindo a mensagem “Você não é Chrome headless”

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:

  • Proxies de datacenters — Mais de 770 000 IPs de datacenters.
  • Proxies residenciais — Mais de 72 milhões de IPs residenciais em mais de 195 países.
  • Proxies de ISPs — Mais de 700 000 IPs de ISPs.
  • Proxies móveis — Mais de 7 milhões de IPs móveis.