Usando o puppeteer-humanize para raspagem da Web: Guia 2025

Explore por que o puppeteer-humanize aprimora a raspagem da Web ao imitar ações humanas para contornar a análise do comportamento do usuário.
12 min de leitura
Puppeteer humanize web scraping

Neste artigo, você aprenderá:

  • Por que o vanilla Puppeteer não é suficiente contra a análise do comportamento do usuário.
  • O que é a humanização do titereiro e como ela ajuda a superar essas limitações.
  • Como usá-lo para raspagem da Web em uma seção de tutorial passo a passo.
  • Os desafios restantes com essa abordagem de extração de dados da Web.

Vamos mergulhar de cabeça!

Análise do comportamento do usuário: Por que o Puppeteer padrão é insuficiente

A análise do comportamento do usuário (UBA) é o processo de coleta e análise de dados sobre como os usuários interagem com uma página da Web. Na raspagem da Web, seu principal objetivo é detectar comportamentos anômalos ou suspeitos para identificar bots.

Essa sofisticada técnica antibot está ganhando popularidade. O motivo é que os bots modernos com tecnologia de IA estão evoluindo continuamente para se tornarem mais parecidos com os humanos. Assim, os métodos tradicionais de detecção de bots podem não ser mais eficazes contra eles.

Para combater a UBA, algumas bibliotecas de automação tentam imitar o comportamento humano de forma mais realista. Por exemplo, elas simulam os movimentos do mouse usando heurística ou até mesmo aprendizado de máquina. No entanto, a digitação ainda tende a parecer robótica na maioria dos casos, o que é um problema.

Agora, suponha que o script do Puppeteer precise preencher um formulário. Mesmo que você adicione um pequeno atraso entre os pressionamentos de tecla usando a função type(), essa interação não pareceria natural.

Tome como exemplo o formulário de login em Quotes to Scrape:

import puppeteer from "puppeteer";

(async () => {
  // set up a new browser instance in headful mode
  const browser = await puppeteer.launch({
    headless: false, // set to false so you can watch the interaction
    defaultViewport: null,
  });
  const page = await browser.newPage();

  // connect to the target page
  await page.goto("https://quotes.toscrape.com/login");

  // simulate typing with a delay of 200ms between each character
  await page.type("input[name=\"username\"]", "username", { delay: 200 });
  await page.type("input[name=\"password\"]", "password", { delay: 200 });

  // ...

  // close the browser and release its resources
  await browser.close();
})();

Esta é a aparência da interação:

A interação semelhante a um bot do Puppeteer

Embora a abordagem acima seja mais realista do que simplesmente definir o valor dos campos de entrada diretamente, ela ainda não parece humana. O problema é que a digitação parece muito suave, consistente e sem erros. Pergunte a si mesmo: que usuário real digita cada caractere exatamente no mesmo intervalo, sem hesitação ou erros de digitação?

Como você pode imaginar, os sistemas UBA avançados podem identificar facilmente esses scripts. É aí que ferramentas como o puppeteer-humanize entram em ação!

O que é puppeteer-humanize?

puppeteer-humanize é uma biblioteca Node.js que torna a automação do Puppeteer mais parecida com a humana, especificamente ao interagir com campos de entrada de texto. Ela ajuda a contornar métodos comuns de detecção de bots que analisam o comportamento do usuário, que geralmente sinalizam ações irrealistas ou excessivamente precisas.

Para conseguir isso, o puppeteer-humanize injeta imperfeições realistas nas interações regulares do Puppeteer:

  1. Simulação de erros tipográficos.
  2. Imitando o uso da tecla backspace para corrigir esses erros.
  3. Repetição do texto excluído com atrasos aleatórios.
  4. Introduzir atrasos aleatórios entre os pressionamentos de tecla para variar a velocidade de digitação.

Isso faz com que a digitação automatizada pareça mais natural e menos mecânica. No entanto, é importante observar que a biblioteca se concentra apenas em humanizar o comportamento de digitação e as entradas de formulários. Portanto, não é uma solução abrangente de desvio anti-bot.

Além disso, lembre-se de que seu último commit foi em 2021 e ainda não oferece suporte a recursos avançados, como a simulação de movimento do mouse baseada em GAN. Portanto, seu escopo permanece limitado apenas ao comportamento de digitação.

Como usar o puppeteer-humanize para raspagem da Web

Siga as etapas abaixo para saber como usar o puppeteer-humanize para criar um bot de raspagem mais parecido com o humano. Isso reduz as chances de ser detectado pelos sistemas UBA, especialmente quando seu script precisa digitar dados em formulários.

O alvo será o formulário de login em Quotes to Scrape:

Este exemplo servirá apenas para demonstrar como simular o preenchimento realista de formulários. Em cenários reais de raspagem, evite raspar o conteúdo por trás de formulários de login, a menos que você tenha permissão explícita, pois isso pode gerar preocupações legais.

Agora, vamos ver como usar o puppeteer-humanize para raspagem da Web!

Etapa 1: Configuração do projeto

Se você ainda não tiver um projeto Node.js configurado, poderá criar um na pasta do projeto com o npm init:

npm init -y

O comando acima gerará um arquivo package.json em seu diretório de projeto. Dentro da pasta do projeto, crie um arquivo script.js, que é onde você colocará sua lógica de raspagem JavaScript:

your-project-folder/
├── package.json
└── script.js

Em seguida, abra a pasta em seu IDE JavaScript favorito. O Visual Studio Code funcionará perfeitamente.

Em seu IDE, modifique o arquivo package.json para incluir a seguinte linha:

"type": "module"

Isso define seu projeto para usar o ESM(ECMAScript Modules), que geralmente é recomendado para projetos modernos do Node.js em vez do formato CommonJS padrão.

Ótimo! Agora você está pronto para aproveitar as vantagens do puppeteer-humanize para simular interações realistas em seus scripts de raspagem.

Etapa 2: Instalar e começar a usar o puppeteer-humanize

Embora o puppeteer-humanize fosse originalmente um plug-in para o Puppeteer Extra, esse não é mais o caso. Portanto, para usá-lo, você só precisa instalar:

Instale os dois com o seguinte comando:

npm install @forad/puppeteer-humanize puppeteer

Em seguida, abra o arquivo script.js e inicialize um script básico do Puppeteer como este:

import puppeteer from "puppeteer";

(async () => {
  // set up a new browser instance in headful mode
  const browser = await puppeteer.launch({
    headless: false, // set to false so you can watch the interaction
    defaultViewport: null,
  });
  const page = await browser.newPage();

  // ...

  // close the browser and release its resources
  await browser.close();
})();

Fantástico! Agora você pode começar a implementar suas interações de raspagem com aparência humana.

Etapa nº 3: Conecte-se à página de destino e selecione os elementos de entrada

Use o Puppeteer para navegar até a página de destino:

await page.goto("https://quotes.toscrape.com/login");

Agora, abra a mesma página em seu navegador, clique com o botão direito do mouse no formulário de login e selecione “Inspecionar” para examinar os elementos do formulário:

Você perceberá que o formulário contém:

  • Um campo de entrada de nome de usuário que pode ser selecionado com input[name="username"]
  • Um campo de entrada de senha que você pode selecionar com input[name="password"]

Para selecionar esses elementos de entrada em seu script, use o método $() do Puppeteer:

const usernameInput = await page.$("input[name=\"username\"]");
const passwordInput = await page.$("input[name=\"password\"]");

⚠️ Importante: o puppeteer-humanize não funciona com localizadores. Isso significa que você deve usar $() ou $$() para recuperar os identificadores de elementos diretamente.

Se ambas as entradas forem encontradas na página, prepare-se para interagir com elas da mesma forma que um usuário real faria:

if (usernameInput && passwordInput) {
  // interaction...
}

Maravilhoso! É hora de preencher essas entradas como se você fosse um usuário real.

Etapa 4: Configurar a função de digitação do titereiro-humanizar

Primeiro, importe a função typeInto do puppeteer-humanize:

import { typeInto } from "@forad/puppeteer-humanize";

Em seguida, use-o para configurar uma interação de preenchimento de formulário semelhante à humana, conforme mostrado abaixo:

const typingConfig = {
  mistakes: {
    chance: 10, // 10% chance of introducing a typo that gets corrected
    delay: {
      min: 100, // minimum delay before correcting a mistake (in ms)
      max: 500, // maximum delay before correcting a mistake (in ms)
    },
  },
  delays: {
    all: {
      chance: 100, // 100% chance to add delay between each keystroke
      min: 100, // minimum delay between characters (in ms)
      max: 200, // maximum delay between characters (in ms)
    },
  },
};

// strings to fill into the input elements
const username = "username";
const password = "password";

// apply the human-like typing logic to both inputs
await typeInto(usernameInput, username, typingConfig);
await typeInto(passwordInput, password, typingConfig);

A configuração de digitação acima:

  • Ocasionalmente, apresenta erros de digitação, seguidos de correções realistas – exatamente como um usuário real faria.
  • Adiciona atrasos aleatórios entre cada pressionamento de tecla, imitando a variação natural da velocidade de digitação.

Esse comportamento faz com que sua automação pareça muito mais humana, limitando as chances de detecção pelas tecnologias UBA.

Fantástico! Seu script Puppeteer agora deve se comportar muito mais como um ser humano real.

Etapa 5: Preencha o formulário e prepare-se para o Web Scraping

Agora você pode preencher o formulário usando o código abaixo:

const submitButton = page.locator("input[type=\"submit\"]");
await submitButton.click();

Lembre-se de que o formulário de login no Quotes to Scrape é apenas uma página de teste. Em detalhes, você pode acessá-lo com as credenciais de nome de usuário e senha. Depois de enviar o formulário, você será redirecionado para uma página que contém os dados que talvez queira extrair:

Envio do formulário de login

Nesse ponto, você pode usar a API normal do Puppeteer para implementar a lógica de raspagem real:

// wait for the page to load
await page.waitForNavigation();

// scraping logic...

Agora, o foco deste artigo é o puppeteer-humanize. Portanto, não abordaremos a parte de coleta de dados aqui.
Se você estiver interessado em coletar dados do Quotes to Scrape e exportá-los para CSV, leia nosso tutorial completo sobre coleta de dados da Web com o Puppeteer.

Etapa nº 6: Juntar tudo

Seu script.js agora deve conter:

import puppeteer from "puppeteer";
import { typeInto } from "@forad/puppeteer-humanize";

(async () => {
  // set up a new browser instance in headful mode
  const browser = await puppeteer.launch({
    headless: false, // set to false so you can watch the interaction
    defaultViewport: null,
  });
  const page = await browser.newPage();

  // visit the target page
  await page.goto("https://quotes.toscrape.com/login");

  // select the login form inputs
  const usernameInput = await page.$("input[name=\"username\"]");
  const passwordInput = await page.$("input[name=\"password\"]");

  // if they are not both null, interact with them
  if (usernameInput && passwordInput) {
    // configure the typing behavior
    const typingConfig = {
      mistakes: {
        chance: 10, // 10% chance of introducing a typo that gets corrected
        delay: {
          min: 100, // minimum delay before correcting a mistake (in ms)
          max: 500, // maximum delay before correcting a mistake (in ms)
        },
      },
      delays: {
        all: {
          chance: 100, // 100% chance to add delay between each keystroke
          min: 100, // minimum delay between characters (in ms)
          max: 200, // maximum delay between characters (in ms)
        },
      },
    };

    // test strings to fill into the input elements
    const username = "username";
    const password = "password";

    // apply the human-like typing logic to both inputs
    await typeInto(usernameInput, username, typingConfig);
    await typeInto(passwordInput, password, typingConfig);

    // submit the form
    const submitButton = page.locator("input[type=\"submit\"]");
    await submitButton.click();

    // wait for the page to load
    await page.waitForNavigation();

    // scraping logic...
  }

  // close the browser and release its resources
  await browser.close();
})();

Inicie o script de raspagem puppeteer-humanize acima com:

node script.js

O resultado será:

Observe como a interação de digitação é natural

Como você pode ver, o bot Puppeteer agora interage com o formulário de login de uma forma muito mais natural, exatamente como um usuário humano real faria. Ele digita em uma velocidade realista, ocasionalmente comete erros de digitação e os corrige. Esse é o poder do Puppeteer - humanizar!

Desafios para essa abordagem de raspagem da Web

O puppeteer-humanize é definitivamente um grande aliado para reduzir as chances de ser detectado por tecnologias que analisam como os usuários interagem. Ainda assim, as técnicas antirrastreamento, antirrastreamento e antibot vão muito além do comportamento do usuário!

Primeiro, lembre-se de que o Puppeteer deve instrumentar o navegador para controlá-lo programaticamente. Isso introduz alterações sutis e sinais que podem expor o navegador como automatizado. Para reduzir esses vazamentos, você também deve considerar o uso do Puppeteer Stealth.

Mesmo com o puppeteer-humanize e o Puppeteer Stealth implementados, você ainda poderá encontrar CAPTCHAs durante suas interações. Nesses casos, dê uma olhada em nosso artigo sobre como contornar CAPTCHA com o Playwright.

Embora essas ferramentas e guias possam ajudá-lo a criar uma configuração de raspagem mais resiliente, muitas das soluções alternativas em que eles se baseiam não duram para sempre. Se você estiver lidando com sites que usam soluções antibot altamente sofisticadas, suas chances de sucesso diminuem significativamente. Além disso, a adição de vários plug-ins pode tornar sua configuração mais pesada em termos de memória e uso de disco, e mais difícil de escalonar.

Nesse ponto, o problema não é apenas o Puppeteer em si, mas as limitações do navegador que ele controla. O verdadeiro avanço vem da integração do Puppeteer com um navegador headful baseado em nuvem, criado especificamente para raspagem da Web. Essa solução inclui suporte integrado para proxies rotativos, solução avançada de CAPTCHA, impressões digitais realistas do navegador e muito mais. É exatamente disso que se trata a API do navegador da Bright Data!

Conclusão

Neste tutorial, você aprendeu por que o Puppeteer vanilla fica aquém da análise do comportamento do usuário e como resolver isso com o puppeteer-humanize. Em particular, você viu como integrar essa abordagem em um fluxo de trabalho de raspagem da Web por meio de um tutorial passo a passo.

Embora esse método possa ajudá-lo a contornar sistemas antibot simples, ele não garante uma alta taxa de sucesso. Isso é especialmente verdadeiro quando se trata de raspar sites que dependem de CAPTCHAs, proibições de IP ou técnicas modernas de antibot com tecnologia de IA. Além disso, o dimensionamento dessa configuração pode ser complexo.

Se o seu objetivo é fazer com que seu script de raspagem – ou até mesmo um agente de IA – se comporte mais como um usuário real, considere usar um navegador criado especificamente para esse caso de uso: O navegador de agentes da Bright Data.

Crie uma conta gratuita na Bright Data para acessar toda a nossa infraestrutura de raspagem pronta para IA!