Este tutorial de Puppeteer Stealth irá cobrir:
- O que é a deteção de bots e porque é que é um problema para Puppeteer.
- O que é Puppeteer Extra.
- Como utilizar o Plugin Stealth com Puppeteer Extra para evitar bloqueios.
Deteção de bots: O maior inimigo de Puppeteer
Puppeteer é uma das bibliotecas de JavaScript mais utilizadas para a automatização do navegador. É tão popular porque é apoiada pela equipa de Chrome em Google. A sua API de alto nível permite-lhe controlar navegadores sem cabeça ou com cabeça através do protocolo DevTools, o que a torna uma excelente ferramenta para a raspagem da web, testes automatizados e desenvolvimento de bots.
No entanto, Puppeteer pode ser facilmente impedido por tecnologias de deteção de bots. Isto é particularmente verdade quando se utiliza Chrome/Chromium em modo sem cabeça. Porquê? Porque Puppeteer define automaticamente propriedades e cabeçalhos predefinidos que fazem com que o navegador sob controlo apareça como uma instância sem cabeça. Por exemplo, define a seguinte configuração de Chrome: navigator.webdriver: true
.
As soluções antibot sabem disso e analisam essas definições para determinar se o usuário atual é um humano ou um bot. Quando encontram algumas configurações suspeitas, marcam o usuário como um bot.
Por exemplo, considere este teste de deteção de bots em modo sem cabeça. Se abrir a página de teste no seu navegador, verá:
Agora, tente visitar esse sítio com Puppeteer vanilla e extraia o resultado do teste:
import puppeteer from "puppeteer"
(async () => {
// set up the browser and launch it
const browser = await puppeteer.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 of the test result
const resultElement = await page.$("#res")
const message = await resultElement.evaluate(e => e.textContent)
// print the resulting message
console.log(`The result of the test is "%s"`, message);
// close the current browser session
await browser.close()
})()
Inicie o script acima e verá:
The result of the test is "You are Chrome headless"
Isto significa que o teste falhou, uma vez que a página foi capaz de detetar o pedido automático como vindo de um navegador sem cabeça.
Por defeito, Puppeteer é uma ferramenta limitada. Para evitar a deteção de bots, teria de o ajustar manualmente e substituir as configurações predefinidas. Evite tudo isso com Puppeteer Extra!
Puppeteer Extra: Uma versão extensível de Puppeteer
Puppeteer Extra é um wrapper leve construído em torno de Puppeteer que o estende com suporte a plugins. Por outras palavras, puppeteer-extra
é um substituto de puppeteer
. Para além de funcionar como a popular biblioteca de automação do navegador, fornece o método use()
para registar plugins.
Cada plugin acrescenta uma funcionalidade extra a Puppeteer. Alguns dos plugins mais úteis disponíveis são:
puppeteer-extra-plugin-stealth
: Para tornar mais difícil para a tecnologia de deteção de bots detetar instâncias de navegador sem cabeça.puppeteer-extra-plugin-recaptcha
: Para resolver reCAPTCHAs e hCaptchas automaticamente.puppeteer-extra-plugin-adblocker
: Para remover anúncios e rastreadores, reduzindo a largura de banda e os tempos de carregamento como resultado.puppeteer-extra-plugin-devtools
: Para tornar a depuração do navegador possível a partir de qualquer lugar, criando um túnel seguro para as ferramentas de desenvolvimento.puppeteer-extra-plugin-repl
: Para tornar a depuração divertida com uma interface REPL (Read-Eval-Print-Loop) interativa.puppeteer-extra-plugin-block-resources
: Para bloquear dinamicamente os recursos da página, como imagens, ficheiros multimédia, CSS e JS.puppeteer-extra-plugin-anonymize-ua
: Para tornar anónimo o cabeçalho de agente de usuário na navegação da página. Saiba porque é que isto é importante no nosso guia sobre agente de usuário para raspagem da web.puppeteer-extra-plugin-user-preferences
: Para definir as preferências personalizadas do usuário de Chrome/Chromium.
Vamos agora aprofundar o plugin Puppeteer Stealth.
O que é e o que faz o plugin Stealth de Puppeteer Extra
puppeteer-extra-plugin-stealth
é um plugin para Puppeteer Extra que inclui um conjunto de configurações para evitar a deteção de bots. Em pormenor, Puppeteer Stealth baseia-se em módulos de evasão incorporados que substituem as fugas e propriedades de Puppeteer que o expõem como um bot. Por exemplo, remove “HeadlessChrome” do cabeçalho de agente de usuário e exclui a propriedade navigator.webdriver
definida pelo Puppeteer por padrão.
O objetivo do plugin Stealth de Puppeteer Extra é fazer com que uma instância de Chromium sem cabeça controlada pelo Puppeteer passe todos os testes de deteção de bots em sannysoft.com. Atualmente, atinge o seu objetivo. Ao mesmo tempo, como indicado na documentação oficial, ainda há maneiras de detetar o Chromium sem cabeça. Isto significa que é impossível contornar todos os mecanismos de deteção de bots, mas a ideia do projeto é tornar esse processo o mais difícil possível.
Como utilizar Puppeteer Stealth para evitar a deteção de bots durante a raspagem de páginas web
Está na altura de ver como integrar Puppeteer Stealth num script de raspagem de Puppeteer
para evitar ser bloqueado.
Siga os passos abaixo!
Passo 1: Instalar Puppeteer Extra e o plug-in Stealth
Execute o comando abaixo para adicionar Puppeteer Extra e o plugin Puppeteer Stealth às dependências do seu projeto:
npm install puppeteer-extra puppeteer-extra-plugin-stealth
Ótimo! Acabou de cumprir os pré-requisitos para integrar o plug-in Stealth no seu script automatizado de Puppeteer.
Passo 2: Configurar Puppeteer Extra e registar o plug-in Stealth
Primeiro, substitua a instrução de importação de puppeteer
por esta instrução:
import puppeteer from "puppeteer-extra"
Por outras palavras, certifique-se de que importa o objeto puppeteer
de "puppeteer-extra``"
e não de "puppeteer``"
.
Depois, importe StealthPlugin
de puppeteer-extra-plugin-stealth
:
import StealthPlugin from "puppeteer-extra-plugin-stealth"
Se, em vez disso, for um usuário de CommonJS, precisará:
const puppeteer = require("puppeteer-extra")
const StealthPlugin = require("puppeteer-extra-plugin-stealth")
Em seguida, registe o plugin Stealth, passando-o para o objeto de Puppeteer
através do método use()
:
puppeteer.use(StealthPlugin())
Espetacular! Acabou de adicionar ao Puppeteer as capacidades de evasão predefinidas suportadas pelo plug-in.
Note-se que o construtor StealthPlugin()
aceita um objeto opcional com o conjunto de cadeias de caracteres correspondentes às evasões a ativar:
// enable only a few evasion techniques
puppeteer.use(StealthPlugin({
enabledEvasions: new Set(["chrome.app", "chrome.csi", "defaultArgs", "navigator.plugins"])
}))
Caso contrário, utilize a lógica abaixo para remover dinamicamente uma estratégia de evasão específica do plug-in Stealth:
const stealthPlugin = StealthPlugin()
puppeteer.use(stealthPlugin)
// ...
// remove the "user-agent-override" evasion method
pluginStealth.enabledEvasions.delete("user-agent-override")
Passo 3: Juntar tudo
Integre Puppeteer Extra e o seu plugin Stealth no script que viu no início do artigo:
import puppeteer from "puppeteer-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"
(async () => {
// configure the stealth plugin
puppeteer.use(StealthPlugin())
// set up the browser and launch it
const browser = await puppeteer.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 of the test result
const resultElement = await page.$("#res")
const message = await resultElement.evaluate(e => e.textContent)
// print the resulting message
console.log(`The result of the test is "%s"`, message);
// close the current browser session
await browser.close()
})()
Execute este trecho e imprimirá:
The result of the test is "You are not Chrome headless"
Et voilà! A página selecionada com capacidades de deteção de bots já não é capaz de marcar o seu script automatizado de Puppeteer como um bot.
Parabéns! Agora é um ninja de Puppeteer Stealth, e nenhuma tecnologia de deteção de bots vai assustá-lo.
Conclusão
Neste artigo, você entendeu por que a deteção de bots é um desafio para Puppeteer e como lidar com isso. Graças a Puppeteer Extra, pode alargar a funcionalidade de Puppeteer com plugins. Em particular, o plugin Stealth é um grande aliado para evitar a deteção de bots, e aqui aprendeu a utilizá-lo.
Não importa o quão sofisticado seja o seu Puppeteer Extra, as tecnologias antibot avançadas, como Cloudflare, ainda serão capazes de detetar e bloquear os seus scripts. Pode optar por outro pacote de automatização do navegador, mas a causa da deteção é o navegador e não a biblioteca. A solução é um navegador escalável com funcionalidade de desvio antibot que possa ser integrado em qualquer biblioteca de automatização de navegadores. Esse navegador existe e chama-se Navegador de Raspagem!
O Navegador de Raspagem da Bright Data é um navegador de nuvem altamente escalável que funciona com Puppeteer, Playwright, Selenium e muito mais. Rota automaticamente o IP de saída em cada pedido e pode tratar da impressão digital do navegador, da resolução de CAPTCHA e de tentativas automáticas por você. Isto é possível graças às funcionalidades de desbloqueio baseadas em proxy em que assenta.
Os proxies de Bright Data são usados por empresas da Fortune 500 e mais de 20.000 clientes. Esta rede mundial fiável de proxy envolve:
- Proxies de centros de dados – Mais de 770.000 IPs de centros de dados.
- Proxies residenciais – Mais de 72 milhões de IPs residenciais em mais de 195 países.
- Proxies de ISP – Mais de 700.000 IPs de ISP.
- Proxies móveis – Mais de 7 milhões de IPs móveis.
Fale com um dos nossos representantes de vendas e veja qual dos produtos da Bright Data melhor se adapta às suas necessidades.
Não é necessário cartão de crédito