Casos de Uso

Tratamento automatizado de login CAPTCHA com CaptchaAI

As páginas de login são o local mais comum para encontrar CAPTCHAs. Seja reCAPTCHA v2, v3, Turnstile ou um CAPTCHA de imagem, CaptchaAI resolve o desafio enquanto sua automação cuida do preenchimento e envio de formulários.

Tipos comuns de CAPTCHA de login

CAPTCHA Como aparece Método CaptchaAI
reCAPTCHA v2 Caixa de seleção ou desafio antes de enviar method=userrecaptcha
reCAPTCHA v3 Pontuação invisível, bloqueia usuários com pontuação baixa method=userrecaptcha&version=v3
Cloudflare Turnstile Widget antes do formulário de login method=turnstile
Imagem CAPTCHA Imagem de texto para digitar method=base64

Método 1: solicitações HTTP (sem navegador)

Para formulários de login que aceitam solicitações POST padrão:

import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": page_url
    })
    task_id = resp.text.split("|")[1]
    for _ in range(60):
        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
        if result.text.startswith("OK|"): return result.text.split("|")[1]
        raise Exception(result.text)
    raise TimeoutError()

# Login flow
session = requests.Session()
login_url = "https://staging.example.com/qa-login"

# Load login page to get cookies and site key
page = session.get(login_url)
# Extract site_key from the page HTML...
site_key = "6Le-wvkS..."

# Solve CAPTCHA
token = solve_recaptcha(site_key, login_url)

# Submit login form
resp = session.post(login_url, data={
    "username": "user@example.com",
    "password": "your_password",
    "g-recaptcha-response": token
})

if resp.url != login_url:
    print("Login successful!")
    # session now has auth cookies for subsequent requests

Método 2: Selênio (Python)

Para páginas de login que requerem execução de JavaScript:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time

API_KEY = "YOUR_API_KEY"

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

# Navigate to login page
driver.get("https://staging.example.com/qa-login")
wait = WebDriverWait(driver, 10)

# Fill in credentials
username_field = wait.until(EC.presence_of_element_located((By.NAME, "username")))
username_field.send_keys("user@example.com")
driver.find_element(By.NAME, "password").send_keys("your_password")

# Extract site key and solve
recaptcha = driver.find_element(By.CLASS_NAME, "g-recaptcha")
site_key = recaptcha.get_attribute("data-sitekey")

token = solve_recaptcha(site_key, driver.current_url)

# Inject token
driver.execute_script(
    f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
)

# Submit
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
wait.until(EC.url_changes(driver.current_url))
print(f"Logged in! Now at: {driver.current_url}")

Método 3: Titereiro (Node.js)

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

const API_KEY = "YOUR_API_KEY";

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

  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;
    if (result.data.startsWith("OK|")) return result.data.split("|")[1];
    throw new Error(result.data);
  }
}

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

  // Fill credentials
  await page.type("#username", "user@example.com");
  await page.type("#password", "your_password");

  // Get site key and solve
  const siteKey = await page.$eval(".g-recaptcha", (el) =>
    el.getAttribute("data-sitekey")
  );
  const token = await solveRecaptcha(siteKey, page.url());

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

  console.log("Logged in:", page.url());
  await browser.close();
})();

Lidando com Multifator + CAPTCHA

Alguns sites combinam CAPTCHAs com autenticação multifator:

# Step 1: Solve CAPTCHA and submit login
token = solve_recaptcha(site_key, login_url)
resp = session.post(login_url, data={
    "username": "user@example.com",
    "password": "your_password",
    "g-recaptcha-response": token
})

# Step 2: Handle MFA page (if redirected)
if "verify" in resp.url or "mfa" in resp.url:
    # Your MFA code logic here
    mfa_code = get_mfa_code()
    resp = session.post(resp.url, data={"code": mfa_code})

# Step 3: Verify logged in
assert "dashboard" in resp.url

Solução de problemas

Problema Causa Correção
O login retorna para a página CAPTCHA O token expirou Resolva e envie em 60 segundos
"Credenciais inválidas" com senha correta Token CSRF ausente Extraia e inclua o token CSRF da página de login
Sessão perdida após login Cookies não persistiram Use requests.Session() ou cookies do navegador
reCAPTCHA v3 bloqueia apesar do token Pontuação muito baixa CaptchaAI otimiza pontuações mais altas; verificar parâmetro de ação

Perguntas frequentes

Posso automatizar logins em qualquer site?

CaptchaAI lida com o componente CAPTCHA. Sua automação precisa lidar com o próprio formulário de login (preenchimento de campos, envio, gerenciamento de cookies). A legalidade depende da sua autorização para acessar a conta.

Preciso de um navegador para automação de login?

Nem sempre. Muitas páginas de login aceitam solicitações HTTP POST padrão. Use um navegador somente quando o login exigir execução de JavaScript ou interações complexas.

Como faço a manutenção da sessão após o login?

Use requests.Session() em Python ou mantenha cookies na instância do seu navegador. Os cookies de sessão do login são necessários para todas as solicitações autenticadas subsequentes.

Guias Relacionados

  • Manipulação de Selênio CAPTCHA com Python
  • Puppeteer CAPTCHA resolvendo com Node.js
  • Manipulação de CAPTCHA do dramaturgo
Os comentários estão desativados para este artigo.