CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) é implementado pelos sites para diferenciar usuários humanos de bots automatizados, principalmente para evitar abusos e manter a integridade do serviço; lidar com ele, sobretudo em processos automatizados, envolve estratégias como rotação de IP, mitigação avançada de fingerprinting de navegador e integração com serviços terceirizados de resolução de CAPTCHA.
Por que os sites implementam CAPTCHA
Os sites implantam mecanismos de CAPTCHA para proteger seus recursos e a experiência do usuário contra diversas formas de abuso automatizado. Esses sistemas funcionam como um porteiro, exigindo um teste fácil de passar para humanos, mas difícil para bots.
Prevenção de abuso automatizado
As principais motivações para implementar CAPTCHA incluem:
- Prevenção de spam: bots costumam ser usados para postar comentários de spam em blogs e fóruns, ou para criar contas falsas destinadas a spam por e-mail. O CAPTCHA bloqueia esses envios automatizados.
- Credential stuffing e sequestro de conta (ATO): scripts automatizados tentam entrar em contas de usuários com listas de credenciais roubadas. O CAPTCHA impede tentativas de login automatizadas em larga escala.
- Web scraping e roubo de dados: bots não autorizados conseguem extrair rapidamente grandes volumes de dados, como listagens de produtos, informações de preços ou dados de usuários, o que pode sobrecarregar os recursos do servidor e violar os termos de serviço.
- Ataques de negação de serviço (DoS): ataques DoS na camada de aplicação envolvem bots que acessam repetidamente páginas específicas ou executam ações computacionalmente pesadas para sobrecarregar um servidor. O CAPTCHA pode mitigá-los exigindo verificação a cada requisição.
- Criação fraudulenta de contas: bots criam inúmeras contas falsas para explorar períodos de teste grátis, ofertas promocionais ou praticar outras atividades fraudulentas.
- Fraude de anúncios: bots simulam interações humanas com anúncios para gerar impressões ou cliques falsos, afetando a receita de publicidade e a analítica.
- Cambismo e acúmulo de estoque: bots são usados para comprar rapidamente itens de disponibilidade limitada (por exemplo, ingressos de shows, produtos de edição limitada) antes dos usuários humanos, muitas vezes para revender a preços inflacionados.
Tipos de desafios de CAPTCHA
A tecnologia de CAPTCHA evoluiu do simples reconhecimento de texto para a análise comportamental complexa.
CAPTCHA tradicional
As primeiras formas exigiam que o usuário transcrevesse textos ou números distorcidos.
* Baseado em texto: letras/números distorcidos, às vezes com ruído de fundo.
* Baseado em áudio: um trecho de áudio com fala distorcida para usuários com deficiência visual.
CAPTCHA baseado em imagem
Exigem que o usuário identifique objetos específicos em um conjunto de imagens.
* reCAPTCHA v2 (caixa "Não sou um robô"): normalmente apresenta uma caixa de seleção. Se o comportamento do usuário for suspeito, o desafio escala para imagens (por exemplo, "selecione todos os quadrados com semáforos").
* hCaptcha: semelhante ao reCAPTCHA v2, muitas vezes usado como alternativa por questões de privacidade.
CAPTCHA invisível
Rodam em segundo plano, analisando o comportamento do usuário sem interação explícita, a menos que a suspeita seja alta.
* reCAPTCHA v3: atribui uma pontuação (0.0 a 1.0) com base nas interações do usuário ao longo do site. Pontuações baixas indicam comportamento de bot.
* hCaptcha Enterprise: oferece análise de risco avançada, modelos personalizados e integração para detecção de bots em nível corporativo.
* CAPTCHA comportamental: analisa movimentos do mouse, padrões de digitação, comportamento de rolagem e outros dados de telemetria para distinguir humano de bot.
Como lidar com CAPTCHA em operações automatizadas
Lidar com CAPTCHA em fluxos automatizados, especialmente ao usar serviços de proxy, exige uma abordagem em várias frentes. Os proxies ajudam principalmente a evitar os gatilhos de CAPTCHA, enquanto serviços externos costumam ser necessários para resolvê-los.
Escolha e gestão de proxies para evitar CAPTCHA
O tipo e a gestão da sua infraestrutura de proxy influenciam muito a probabilidade de encontrar CAPTCHAs. Os sites costumam sinalizar requisições com base na reputação do IP, no volume de requisições vindas de um único IP e na consistência dos dados de user-agent.
- Proxies residenciais: esses IPs vêm de dispositivos de usuários reais (ISPs) e aparecem como usuários legítimos. Têm menos chance de serem sinalizados do que proxies de datacenter, especialmente em alvos sensíveis.
- Proxies rotativos: distribuir as requisições por um grande pool de IPs (rotacionando-os automaticamente) evita que um único IP acumule volumes suspeitos de requisições ou sofra rate limit. Isso imita o tráfego humano diversificado.
- Proxies dedicados: embora ofereçam uma identidade de IP consistente, são adequados para casos de uso específicos e constantes, nos quais o IP pode construir uma reputação limpa ao longo do tempo. Porém, um único IP dedicado pode ser bloqueado com facilidade se um mau uso for detectado.
- Proxies móveis: IPs de operadoras móveis costumam ser considerados altamente confiáveis pela natureza dinâmica e pelo custo dos dados móveis. Eles oferecem a menor probabilidade de acionar CAPTCHA em sistemas antibot muito agressivos.
Comparação dos tipos de proxy para evitar CAPTCHA:
| Tipo de proxy | Probabilidade de acionar CAPTCHA | Estratégia principal de mitigação | Melhor caso de uso para evitar CAPTCHA |
|---|---|---|---|
| Proxies de datacenter | Alta | Rotação rápida de IP | Alvos de baixo risco, alto volume, em que a reputação do IP é menos crítica. |
| Proxies residenciais | Baixa a média | Imitar o tráfego de usuários reais | Scraping de alto valor, gestão de contas, redes sociais. |
| Proxies móveis | Muito baixa | Aparecer como usuários reais de ISP móvel | Alvos altamente sensíveis, sistemas antibot agressivos. |
Fingerprinting de navegador e gestão de headers
Além do endereço IP, os sites analisam características do navegador e headers de requisição para identificar bots.
- Strings de User-Agent: garanta que sua string de User-Agent seja consistente e imite uma combinação comum de navegador/sistema operacional. Rotacione os User-Agents se necessário.
- Headers HTTP: inclua headers padrão (por exemplo,
Accept,Accept-Language,Referer) que um navegador real enviaria. - Emulação de navegador: use frameworks de navegador headless (por exemplo, Puppeteer, Playwright, Selenium) que renderizam páginas e executam JavaScript, fazendo as requisições parecerem mais humanas. Configure-os para evitar padrões comuns de detecção de bots (por exemplo, a propriedade
navigator.webdriver). - Canvas fingerprinting: bots costumam ter saídas previsíveis de renderização em canvas. Uma emulação avançada consegue contornar isso.
- WebGL fingerprinting: de forma semelhante ao canvas, garanta que os parâmetros de WebGL correspondam aos de um navegador real.
import requests
proxies = {
"http": "http://user:password@proxy_ip:port",
"https": "http://user:password@proxy_ip:port",
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Language": "en-US,en;q=0.9",
"Referer": "https://www.google.com/",
# ... outros headers relevantes
}
try:
response = requests.get("https://example.com/protected-page", proxies=proxies, headers=headers, timeout=10)
response.raise_for_status() # Lança uma exceção em caso de erros HTTP
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
# Verifique a resposta em busca de indicadores de CAPTCHA, se houver
Serviços externos de resolução de CAPTCHA
Quando os CAPTCHAs são inevitáveis, serviços externos oferecem um mecanismo para resolvê-los. Esses serviços operam de forma independente da sua infraestrutura de proxy, mas costumam ser usados em conjunto com ela.
- Solucionadores humanos: esses serviços encaminham os desafios de CAPTCHA para trabalhadores humanos que os resolvem em tempo real. São muito precisos, mas podem introduzir latência e custar mais por resolução.
- Solucionadores com IA/ML: sistemas automatizados usam modelos de machine learning para resolver os tipos mais comuns de CAPTCHA, especialmente os de reconhecimento de imagem. Oferecem resolução mais rápida e custo menor, mas podem ter precisão inferior em variantes complexas ou novas.
- Integração: a maioria dos serviços de resolução oferece APIs para integração em fluxos automatizados. Seu bot detecta um CAPTCHA, envia os detalhes do desafio (por exemplo, site key, dados da imagem) para a API do solucionador e recebe o token ou o texto da solução, que é então enviado ao site alvo.
# Pseudocódigo para integração com a API de um serviço de resolução de CAPTCHA
import requests
import json
def solve_captcha(site_key, page_url, service_api_key):
# Exemplo para um desafio reCAPTCHA v2
payload = {
"clientKey": service_api_key,
"task": {
"type": "NoCaptchaTaskProxyless", # Ou NoCaptchaTask se o solucionador usar proxy
"websiteURL": page_url,
"websiteKey": site_key
}
}
# Envia a requisição para o serviço de resolução de CAPTCHA
create_task_url = "https://api.captchasolver.com/createTask"
response = requests.post(create_task_url, json=payload).json()
if response["errorId"] == 0:
task_id = response["taskId"]
print(f"CAPTCHA task created with ID: {task_id}")
# Consulta o resultado
get_result_url = "https://api.captchasolver.com/getTaskResult"
while True:
result_payload = {
"clientKey": service_api_key,
"taskId": task_id
}
result_response = requests.post(get_result_url, json=result_payload).json()
if result_response["errorId"] == 0 and result_response["status"] == "ready":
return result_response["solution"]["gRecaptchaResponse"] # O token a ser enviado
elif result_response["status"] == "processing":
import time
time.sleep(3) # Aguarda e consulta de novo
else:
print(f"Error solving CAPTCHA: {result_response}")
return None
else:
print(f"Error creating CAPTCHA task: {response}")
return None
# Exemplo de uso:
# captcha_token = solve_captcha("YOUR_SITE_KEY", "https://target-site.com", "YOUR_SOLVER_API_KEY")
# if captcha_token:
# # Envie o captcha_token junto com os dados do formulário para o site alvo
# pass
Rate limiting e interação natural
Mesmo com proxies robustos e fingerprinting bem configurado, taxas de requisição excessivas ou padrões de interação não naturais podem acionar CAPTCHAs.
- Throttling: implemente atrasos entre as requisições para imitar a velocidade de navegação humana.
- Randomização: introduza atrasos aleatórios e caminhos de navegação variados para evitar padrões previsíveis de bot.
- Cookies e sessões: mantenha os cookies de sessão e outras informações de estado para parecer uma sessão contínua de usuário.
Combinar a gestão inteligente de proxies com emulação avançada de navegador e, quando necessário, serviços externos de resolução de CAPTCHA é a solução mais robusta para navegar em sites protegidos por CAPTCHA em ambientes automatizados.
