Casos de Uso

Problemas e soluções de CAPTCHA do navegador modo headless

Os navegadores headless acionam CAPTCHAs com mais frequência do que os navegadores normais. Os sites detectam Chrome, Firefox e WebKit headless por meio de sinal de navegador de JavaScript e apresentam desafios para bloquear a automação. Veja como lidar com cada problema.

Por que os navegadores modo headless obtêm mais CAPTCHAs

Método de detecção Quais sites verificam
sinal de navegador automatizado Defina como true no modo modo headless
Dimensões da janela Headless geralmente usa o padrão 800x600
Renderizador WebGL Headless retorna "SwiftShader"
Protocolo Chrome DevTools Porta CDP aberta
Plug-ins ausentes Sem visualizador de PDF, Flash, etc.
API de permissões Respostas diferentes em headless
String do agente do usuário Substring "HeadlessChrome"

Quando esses sinais se combinam, os sistemas anti-bot (reCAPTCHA, Cloudflare, DataDome) atribuem pontuações de confiança mais baixas e mostram CAPTCHAs.

Solução 1: Resolva CAPTCHAs via API

Em vez de tentar evitar totalmente os CAPTCHAs, resolva-os quando eles aparecerem. CaptchaAI funciona com qualquer navegador headless porque resolve CAPTCHAs do lado do servidor.

Selênio (Python)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
import time

API_KEY = "YOUR_API_KEY"

options = Options()
options.add_argument("--headless=new")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

driver.get("https://staging.example.com/qa-login")

# Check for CAPTCHA
recaptcha = driver.find_elements("class name", "g-recaptcha")
if recaptcha:
    site_key = recaptcha[0].get_attribute("data-sitekey")

    # Solve via CaptchaAI
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": driver.current_url
    })
    task_id = resp.text.split("|")[1]

    while True:
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        token = result.text.split("|")[1]
        break

    # Inject token
    driver.execute_script(
        f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
    )
    driver.find_element("css selector", "form").submit()

Puppeteer (Node.js)

const puppeteer = require("puppeteer");
const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://staging.example.com/qa-login");

// Check for CAPTCHA
const siteKey = await page
  .$eval(".g-recaptcha", (el) => el.getAttribute("data-sitekey"))
  .catch(() => null);

if (siteKey) {
  const submit = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: API_KEY,
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: page.url(),
    },
  });
  const taskId = submit.data.split("|")[1];

  let token;
  while (true) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId },
    });
    if (result.data === "CAPCHA_NOT_READY") continue;
    token = result.data.split("|")[1];
    break;
  }

  await page.evaluate((t) => {
    document.getElementById("g-recaptcha-response").innerHTML = t;
  }, token);
  await page.click('button[type="submit"]');
}

Solução 2: Reduza a frequência CAPTCHA

Embora você sempre possa resolver CAPTCHAs via API, reduzir a frequência com que eles aparecem economiza tempo e custos.

Patch navegador.webdriver

# Selenium
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
// Puppeteer
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, "webdriver", { get: () => false });
});

Definir tamanho realista da janela

# Selenium
driver.set_window_size(1920, 1080)
// Puppeteer
await page.setViewport({ width: 1920, height: 1080 });

Use plug-ins controle de QAs

# Puppeteer
npm install puppeteer-extra configuração padrão do Puppeteer
const puppeteer = require("puppeteer-extra");
const QaPlugin = require("configuração padrão do Puppeteer");
puppeteer.use(QaPlugin());
# Selenium
pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome(headless=True)

Solução 3: Manuseio de Cloudflare Turnstile em staging

As páginas de desafio da Cloudflare exigem mais do que um token – você precisa do cookie cookie_qa_validacao:

# CaptchaAI handles full Cloudflare Turnstile em stagings
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "turnstile_staging",
    "pageurl": "https://example.com",
    "proxy": "http://user:pass@proxy:port",
    "proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]

# Result includes cookie_qa_validacao cookie and user_agent
# Use both to make subsequent requests

Problemas comuns por navegador

Navegador Problema Correção
Cromo modo headless sinal de navegador automatizado = true Usar sinalizador --disable-blink-features
Puppeteer Plugins de navegador ausentes Usar configuração padrão do Puppeteer
Selênio Interruptor enable-automation excludeSwitches: ["enable-automation"]
Dramaturgo sinal de navegador do WebKit Use o canal Chromium com patches controle de QAs
Todos Tamanho consistente da janela de visualização Defina para 1920x1080 ou randomize

Perguntas frequentes

O modo modo headless é sempre detectado?

Nem sempre. Com a configuração controle de QA adequada, muitos sites não sinalizarão seu navegador headless. Mas sistemas anti-bot sofisticados (Cloudflare, PerimeterX) ainda podem detectar o modo modo headless por meio de sinal de navegador avançada.

Devo usar o modo dirigido?

O modo headed reduz a detecção, mas requer um servidor de exibição (Xvfb no Linux). A abordagem API do CaptchaAI funciona independentemente do modo head/headless, tornando-o a solução mais confiável.

Posso evitar totalmente os CAPTCHAs?

Não é confiável. Mesmo navegadores headless bem configurados eventualmente acionam CAPTCHAs em grande escala. Usar CaptchaAI como uma camada de manipulação de CAPTCHA garante que sua automação continue quando surgirem desafios.

Guias Relacionados

Os comentários estão desativados para este artigo.