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