Engenharia9 min de leitura

Como prospectar em escala sem ser bloqueado: humanização log-normal e circuit breaker

Anti-bot do Google Maps detecta padrões, não bots. Distribuição log-normal nos intervalos, Bézier no mouse, backoff exponencial 30s→30min e como os 4 perfis de velocidade se equilibram.

Gráfico de distribuição log-normal de intervalos de extração ao lado de um painel de circuit breaker com pausas exponenciais

Por que intervalos fixos entregam a automação?

Resposta direta: porque humanos variam. Uma pessoa real lê um perfil por 4 segundos, o próximo por 12, o outro por 1,5 — a distribuição desses tempos tem cauda à direita (log-normal), não é uniforme nem fixa.

Heurísticas anti-abuse medem exatamente isso: variância dos intervalos, periodicidade das requisições, retilineidade do cursor. Um script com sleep(2) tem variância zero — flag imediata. A humanização correta amostra cada intervalo de uma distribuição log-normal calibrada para o perfil de velocidade escolhido.

Definição citável: humanização log-normal é a amostragem de tempos de espera e deslocamentos a partir de uma distribuição log-normal (implementada com transformação de Box-Muller), reproduzindo a cauda longa natural do comportamento humano em vez de intervalos fixos ou uniformes.

O que mais conta além do tempo: mouse e scroll

Resposta direta: o caminho do cursor e a curva de rolagem. Cursor humano acelera e desacelera com antecipação e, frequentemente, passa do alvo e volta (overshoot); rolagem humana começa rápida e desacelera suavemente.

Implementação de referência: interpolação com curva cúbica Bézier entre origem e destino do mouse (com ponto de controle deslocado para gerar arco natural) e overshoot probabilístico; scroll por requestAnimationFrame com easing easeOutCubic, pedindo ao orquestrador pausas log-normais entre blocos. Bloqueio de carregamento de imagens/fontes pesadas reduz huellas de requisições e acelera a célula sem mudar o padrão de interação.

Como funciona o circuit breaker na prática?

Resposta direta: três gatilhos objetivos — página de CAPTCHA, redirecionamento para /sorry/index e resposta HTTP 429. Ao detectar qualquer um, o motor pausa, aplica backoff exponencial (30s → 2min → 8min → 30min) e desce um nível de velocidade permanente até nova avaliação.

  1. Detecção: inspecionar URL (path /sorry/index), título da página e status HTTP a cada navegação de célula.
  2. Reação imediata: parar a fila — nenhum lote é perdido (fila persistida em IndexedDB).
  3. Backoff: 30s na 1ª ocorrência, 2min na 2ª, 8min na 3ª, 30min na 4ª+.
  4. Downgrade: uma velocidade abaixo (ex.: Rápido → Moderado) — o degrau é mantido, não reiniciado a cada pausa.
  5. Retomada: célula atual é reprocessada do início; leads já extraídos não duplicam (dedup por place_id).
  6. Telemetria: ocorrências ficam visíveis no painel — se o CAPTCHA só aparece no Turbo, o dado fala.

Qual perfil de velocidade escolher?

Resposta direta: comece no Moderado (~700 lugares/h). Suba para Rápido/Turbo apenas se a telemetria de bloqueio estiver zerada por dias consecutivos e o volume exigir.

Perfis de humanização do Play Google Scraper (valores reais do motor)
PerfilIntervalo entre açõesThroughput aproximadoUso recomendado
Furtivo2,8–6,5s~250 leads/horaContas novas, sessões sensíveis, horários de pico
Moderado (default)1,2–3,0s~700 leads/horaOperação contínua padrão
Rápido0,5–1,4s~1.800 leads/horaBases amplas com telemetria limpa
Turbo0,15–0,5s~4.000 leads/horaJanelas curtas de alta demanda, monitoradas

Qual é o limite prático de uma operação de alta velocidade?

Resposta direta: o limite prático raramente é o perfil de velocidade — é a cobertura da grade (veja o artigo sobre o teto de 120 resultados). Velocidade alta sem grade só repete amostras truncadas mais depressa.

Perguntas frequentes

Fontes e referências

Este artigo está disponível em português (pt-BR). · Play Google Scraper

← Todos os artigos