Como contornar CAPTCHAs com o Puppeteer

Aprenda a contornar CAPTCHAs com o Puppeteer usando plug-ins furtivos e técnicas avançadas para automação perfeita.
9 min de leitura
How to bypass CAPTCHAs with Puppeteer blog image

Neste guia, você aprenderá:

  • O que são CAPTCHAs e se você pode ignorá-los
  • Como usar o Puppeteer para contornar CAPTCHAs por meio de um tutorial passo a passo
  • O que fazer se o processo com o Puppeteer não funcionar

Vamos começar!

O que são CAPTCHAs? E você pode contorná-los?

Um CAPTCHA (teste de Turing público completamente automatizado para distinguir computadores de humanos) é um teste de desafio-resposta que distingue humanos de bots automatizados. Para atingir seus objetivos, os CAPTCHAs são projetados para serem facilmente resolvidos por humanos, mas difíceis para softwares.

Os provedores populares de CAPTCHA incluem Google reCAPTCHA, hCaptcha e BotDetect, e os tipos comuns de CAPTCHA são:

  • Baseados em texto: nesses desafios, os usuários precisam reconhecer letras e números e digitá-los.
  • Baseados em imagens: esses testes exigem que os usuários identifiquem objetos específicos em uma grade de imagens, selecionando as imagens corretas.
  • Baseados em áudio: neste tipo, os usuários precisam escrever as letras que ouvem.
  • Desafios de quebra-cabeças: esse tipo de desafio exige que os usuários resolvam um quebra-cabeça simples, deslizando uma peça para o lugar dedicado.

Os CAPTCHAs são projetados para serem difíceis de serem contornados por softwares automatizados e bots. Portanto, o que você pode fazer é integrar seu software a bibliotecas ou serviços de Resolução de CAPTCHA que dependem de operadores humanos para automatizar esses desafios e resolvê-los.

No entanto, CAPTCHAs codificados não são comuns porque têm um impacto negativo na experiência geral do usuário no site. Por esse motivo, é mais comum que os CAPTCHAs sejam usados como parte de soluções anti-bot mais amplas, como WAFs (Web Application Firewalls):

A CAPTCHA on G2 generated by Cloudflare

Nesses casos, o sistema exibe dinamicamente um CAPTCHA quando há suspeita de que um bot está realizando alguma atividade no site. Para contornar esses CAPTCHAs, você precisa desenvolver um bot que imite o comportamento humano. Embora isso seja possível, requer muito esforço, principalmente porque você precisa atualizar seus scripts com frequência para se antecipar às novas técnicas e métodos de detecção de bots.

A boa notícia é que existe uma solução mais eficaz para contornar CAPTCHAs: o CAPTCHA Solver da Bright Data! Essa ferramenta sempre atualizada resolve todos os seus problemas relacionados ao contorno de CAPTCHAs sem nenhuma dor de cabeça.

Como contornar CAPTCHAs com o Puppeteer: tutorial passo a passo

Agora é hora de criar um script automatizado que imite o comportamento humano para contornar CAPTCHAs.

Para isso, você pode usar o Puppeteer: uma biblioteca JavaScript que fornece uma API de alto nível que controla navegadores da web e, portanto, pode ser usada para imitar comportamentos humanos.

Vamos começar!

Etapa 1: Configuração do projeto

Suponha que você chame a pasta principal do seu projeto de bypass_captcha_puppeteer. Aqui está a estrutura que o repositório deve ter:

bypass_captcha_puppeteer/
├── index.js
└── package.json

Você pode criar com:

mkdir bypass_captcha_puppeteer

Em seguida, entre na pasta do projeto e execute npm init para inicializar um aplicativo Node.js:

cd bypass_captcha_puppeteer
npm init -y

Em seguida, crie um arquivo index.js dentro dele.

Instale o Puppeteer conforme abaixo:

npm install puppeteer

Etapa 2: use a notação ESM Javascript

Para usar a notação ECMAScript Modules em Javascript, o arquivo package.json deve ter a opção "type": "module".

Veja como o arquivo package.json deve ficar:

{
  "name": "bypass_captcha_puppeteer",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "puppeteer": "^23.10.4"
  }
}

Etapa 3: tente ignorar o CAPTCHA com o Puppeteer

Escreva o seguinte código no arquivo index.js para ver se o Puppeteer aparece como um bot ou não:

import puppeteer from 'puppeteer';

const visitBotAnalyzerPage = async () => {
  try {
    // inicializar o navegador
    const browser = await puppeteer.launch();

    // abrir uma nova página do navegador
    const page = await browser.newPage();

    // navegar até o URL de destino
    const url = 'https://bot.sannysoft.com/';
    console.log(`Navegando até ${url}...`);
    await page.goto(url, { waitUntil: 'networkidle2' });
    
    // salvar uma captura de tela da página inteira
    console.log('Fazendo captura de tela da página inteira...');
    await page.screenshot({ path: 'anti-bot-analysis.png', fullPage: true });
    console.log('Captura de tela feita');
    
    // fechar o navegador
    await browser.close();
    console.log('Navegador fechado');
  } catch (error) {
    console.error('Ocorreu um erro:', error);
  }
};

// executar o script
visitBotAnalyzerPage();

Veja o que esse código faz:

  1. Inicia o navegador: o método puppeteer.launch() inicia uma nova instância do navegador com interface do usuário visível (headless: false).
  2. Abre uma nova página do navegador: browser.newPage() cria uma nova página em branco do navegador, onde outras ações podem ser realizadas.
  3. Acessa a página de destino: o método page.goto() redireciona para a página de destino, que é Intoli.com tests, uma página projetada para entender se uma solicitação vem de um bot ou não.
  4. Salva uma captura de tela dos resultados: o método page.screenshot() obtém uma captura de tela dos resultados e a salva.
  5. Fecha o navegador e trata erros: O método browser.close() fecha o navegador e intercepta eventuais erros.

Para executar o código, digite:

node index.js

Agora você pode abrir a imagem salva. Este é o resultado esperado:

The expected result

Portanto, o Puppeteer não passou em alguns testes, como mostra a imagem. Consequentemente, os WAFs provavelmente exibirão CAPTCHAs ao interagir com páginas com o Puppeteer.

Para resolver esses problemas, vamos usar o Puppeteer Stealth!

Etapa 4: instale o plug-in Stealth

O Puppeteer Extra é um wrapper leve para o Puppeteer que, entre outras coisas, permite instalar o plugin Stealth, que impede a detecção de bots ao substituir várias configurações para fazer com que a instância do navegador pareça natural e “humana”.

Instale essas bibliotecas da seguinte maneira:

npm install puppeteer-extra puppeteer-extra-plugin-stealth

Importe o Puppeteer do puppeteer-extra em vez do puppeteer:

import puppeteer from 'puppeteer-extra';

Fantástico! Você está pronto para usar o plugin Stealth para tentar evitar CAPCHAs com o Puppeteer.

Etapa 5: repita o teste com o Stealth Plugin

Agora você precisa implementar o plugin Stealth com esta linha de código:

puppeteer.use(StealthPlugin()).

Assim, o código fica assim:

import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';

// Adicione o plugin Stealth ao Puppeteer
puppeteer.use(StealthPlugin());

const visitBotAnalyzerPage = async () => {
  try {
    // inicie o navegador com as configurações Stealth
    const browser = await puppeteer.launch();
    console.log('Iniciando o navegador no modo Stealth...');
    
    // abrir uma nova página
    const page = await browser.newPage();

    // navegar até a página de destino
    const url = 'https://bot.sannysoft.com/';
    console.log(`Navegando até ${url}...`);
    await page.goto(url, { waitUntil: 'networkidle2' });

    // salvar a captura de tela da página inteira
    console.log('Fazendo captura de tela da página inteira...');
    await page.screenshot({ path: 'anti-bot-analysis.png', fullPage: true });
    console.log(`Captura de tela feita`);

    // fechar o navegador
    await browser.close();
    console.log('Navegador fechado. Script concluído com sucesso');
  } catch (error) {
    console.error('Ocorreu um erro:', error);
  }
};

// executar o script
visitBotAnalyzerPage();

Agora, quando você executar o código novamente com:

node index.js

O resultado esperado é:

The final expected result after running the code

Viva! O script agora passa nos testes de detecção de bots, o que significa que você tem menos chances de receber CAPTCHAs com o Puppeteer!

O que fazer se o procedimento acima para contornar CAPTCHAs com o Puppeteer não funcionar

Infelizmente, o Puppeteer Extra nem sempre é a solução ideal. O motivo é que as configurações do navegador não são a única forma que os antibots utilizam para bloquear softwares automatizados.

Por exemplo, o agente do usuário é outro fator usado pelos sistemas anti-bot para bloquear softwares automatizados. Para resolver esse problema, você pode usar a biblioteca puppeteer-extra-plugin-anonymize-ua, que torna o agente do usuário anônimo.

No entanto, a abordagem baseada em plug-ins descrita anteriormente funciona apenas contra medidas anti-bots básicas: ao lidar com ferramentas mais complexas, como o Cloudflare, você precisa de algo mais poderoso.

Então… Você está procurando um solucionador de CAPTCHA Playwright de verdade? Experimente as soluções de Scraping de dados da Bright Data!

Elas oferecem recursos superiores de desbloqueio com um recurso dedicado de Resolução de CAPTCHA para lidar automaticamente comreCAPTCHA, hCaptcha, px_captcha, SimpleCaptcha, GeeTest CAPTCHA, FunCaptcha, Cloudflare Turnstile, AWS WAF Captcha, KeyCAPTCHA e muitos outros.

Integrar o solucionador de CAPTCHA da Bright Data aos seus scripts é fácil, pois ele funciona com qualquer cliente HTTP ou ferramenta de automação de navegador.

Saiba mais sobre como usar o CAPTCHA Solver da Bright Data e confira a documentação para obter todos os detalhes de integração e configuração.

Conclusão

Neste artigo, você aprendeu por que contornar CAPTCHAs com o Puppeteer pode ser desafiador e como usar o plugin Stealth para substituir a configuração padrão do navegador e contornar a detecção de bots.

O problema dessa abordagem é que ela funciona apenas em cenários simples. Sistemas avançados de detecção de bots ainda podem identificá-lo como um bot e bloqueá-lo.

Portanto, ao contornar CAPTCHAs, a solução real é conectar-se à sua página de destino por meio de uma API de desbloqueio que pode retornar perfeitamente o HTML sem CAPTCHA de qualquer página da web. Essa solução existe e é chamada de Web Unlocker. Seu objetivo é alternar automaticamente o IP de saída a cada solicitação por meio da integração de Proxy, lidar com impressões digitais do navegador, novas tentativas automáticas e resolução de CAPTCHA para você.

Inscreva-se agora para descobrir quais dos produtos de scraping da Bright Data melhor atendem às suas necessidades.

Comece com um teste grátis!