Cada solução de reCAPTCHA por meio de CaptchaAI requer a chave do site e o URL da página corretos. Alguns tipos de CAPTCHA também precisam de parâmetros adicionais - ação (v3), dados (sites do Google) ou sinalizador empresarial. Este guia cobre todos os métodos de extração.
Parâmetros por versão do reCAPTCHA
| Parâmetro | Padrão v2 | v2 Invisível | v3 | Empresa |
|---|---|---|---|---|
googlekey (chave do site) |
Obrigatório | Obrigatório | Obrigatório | Obrigatório |
pageurl |
Obrigatório | Obrigatório | Obrigatório | Obrigatório |
invisible |
- | 1 |
- | - |
action |
- | - | Obrigatório | Às vezes |
data-s |
Às vezes | Às vezes | - | - |
enterprise |
- | - | - | 1 |
Método 1: extração de atributos HTML
Do atributo data-sitekey
import re
import requests
url = "https://staging.example.com/qa-login"
html = requests.get(url).text
# Find data-sitekey
match = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', html)
if match:
sitekey = match.group(1)
print(f"Sitekey: {sitekey}")
# Check if invisible
invisible_match = re.search(r'data-size=["\']invisible["\']', html)
is_invisible = bool(invisible_match)
print(f"Invisible: {is_invisible}")
# Find callback
callback_match = re.search(r'data-callback=["\'](\w+)["\']', html)
callback = callback_match.group(1) if callback_match else None
print(f"Callback: {callback}")
# Check for data-s (Google-owned sites)
data_s_match = re.search(r'data-s=["\']([^"\']+)["\']', html)
data_s = data_s_match.group(1) if data_s_match else None
print(f"data-s: {data_s}")
JavaScript (titereiro)
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });
const params = await page.evaluate(() => {
const widget = document.querySelector('.g-recaptcha');
if (!widget) return null;
return {
sitekey: widget.getAttribute('data-sitekey'),
size: widget.getAttribute('data-size'),
callback: widget.getAttribute('data-callback'),
dataS: widget.getAttribute('data-s'),
invisible: widget.getAttribute('data-size') === 'invisible',
};
});
console.log(params);
Método 2: extração de tag de script
reCAPTCHA v3 e chaves de site empresariais
As chaves do site v3 estão incorporadas no URL do script:
# Find sitekey from script src
v3_match = re.search(
r'recaptcha/(?:api|enterprise)\.js\?.*?render=([A-Za-z0-9_-]+)',
html
)
if v3_match:
sitekey = v3_match.group(1)
print(f"v3 Sitekey: {sitekey}")
# Check enterprise
is_enterprise = 'enterprise.js' in html
print(f"Enterprise: {is_enterprise}")
Encontrando o parâmetro de ação
A ação é passada em código JavaScript, não em atributos HTML:
# Search for grecaptcha.execute calls
action_match = re.search(
r'grecaptcha\.execute\s*\([^,]+,\s*\{[^}]*action\s*:\s*["\']([^"\']+)',
html
)
if action_match:
action = action_match.group(1)
print(f"Action: {action}")
Método 3: extração de Iframe src
Quando o reCAPTCHA é renderizado dentro de um iframe:
# Find reCAPTCHA iframe
iframe_match = re.search(
r'<iframe[^>]+src=["\']([^"\']*recaptcha/api2/anchor[^"\']*)["\']',
html
)
if iframe_match:
iframe_src = iframe_match.group(1)
sitekey_match = re.search(r'k=([A-Za-z0-9_-]+)', iframe_src)
if sitekey_match:
sitekey = sitekey_match.group(1)
print(f"Iframe sitekey: {sitekey}")
Método 4: extração de renderização JavaScript
Para páginas que renderizam reCAPTCHA dinamicamente com grecaptcha.render():
# Find grecaptcha.render calls
render_match = re.search(
r'grecaptcha\.render\s*\([^,]*,\s*\{([^}]+)\}',
html
)
if render_match:
config = render_match.group(1)
sk = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', config)
cb = re.search(r'callback\s*:\s*["\']?(\w+)', config)
sz = re.search(r'size\s*:\s*["\'](\w+)', config)
print(f"Sitekey: {sk.group(1) if sk else 'not found'}")
print(f"Callback: {cb.group(1) if cb else 'not found'}")
print(f"Size: {sz.group(1) if sz else 'not found'}")
Função de extração completa
import re
import requests
def extract_recaptcha_params(url):
html = requests.get(url, timeout=15).text
params = {"pageurl": url}
# Sitekey from data-sitekey
sk = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)', html)
if sk:
params["sitekey"] = sk.group(1)
# Sitekey from script render parameter (v3)
if "sitekey" not in params:
v3 = re.search(r'render=([A-Za-z0-9_-]{20,})', html)
if v3:
params["sitekey"] = v3.group(1)
# Sitekey from iframe
if "sitekey" not in params:
iframe = re.search(r'recaptcha.*?k=([A-Za-z0-9_-]+)', html)
if iframe:
params["sitekey"] = iframe.group(1)
# Sitekey from grecaptcha.render
if "sitekey" not in params:
render = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', html)
if render:
params["sitekey"] = render.group(1)
# Version detection
if re.search(r'data-size=["\']invisible', html):
params["invisible"] = True
if 'enterprise.js' in html:
params["enterprise"] = True
# Action (v3)
action = re.search(
r'action\s*:\s*["\']([^"\']+)',
html[html.find('grecaptcha.execute'):] if 'grecaptcha.execute' in html else ''
)
if action:
params["action"] = action.group(1)
# data-s
ds = re.search(r'data-s=["\']([^"\']+)', html)
if ds:
params["data_s"] = ds.group(1)
# Callback
cb = re.search(r'data-callback=["\'](\w+)', html)
if cb:
params["callback"] = cb.group(1)
return params
# Usage
params = extract_recaptcha_params("https://staging.example.com/qa-login")
for k, v in params.items():
print(f" {k}: {v}")
Resultado esperado:
pageurl: https://staging.example.com/qa-login
sitekey: 6Le-SITEKEY-abc123
invisible: True
callback: onCaptchaComplete
Enviando parâmetros extraídos para CaptchaAI
data = {
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": params["sitekey"],
"pageurl": params["pageurl"],
"json": "1",
}
if params.get("invisible"):
data["invisible"] = "1"
if params.get("enterprise"):
data["enterprise"] = "1"
if params.get("action"):
data["action"] = params["action"]
if params.get("data_s"):
data["data-s"] = params["data_s"]
resp = requests.post("https://ocr.captchaai.com/in.php", data=data).json()
Solução de problemas
| Problema | Causa | Correção |
|---|---|---|
| Nenhuma chave de site encontrada | A página usa renderização dinâmica | Use Puppeteer/Selenium em vez de HTML estático |
| Chave do site errada | Várias instâncias do reCAPTCHA | Verifique qual widget mapeia para o formulário que você está enviando |
| Ação não encontrada | Definido em arquivo JS externo | Buscar e pesquisar arquivos JavaScript vinculados |
Alterações de data-s por solicitação |
Google o regenera | Extraia data-s novo para cada solução |
Perguntas frequentes
Posso extrair parâmetros sem carregar a página em um navegador?
Sim, para a maioria dos sites, a chave do site está no código-fonte HTML, mas os CAPTCHAs renderizados em JavaScript exigem um navegador ou um navegador modo headless.
A chave do site é igual à chave da API?
Não. A sitekey é uma chave pública atribuída ao site. É seguro compartilhar e fica visível no código-fonte da página.
Use parâmetros extraídos com CaptchaAI para uma solução confiável
Obtenha sua chave API emcaptchaai.com.
Guias relacionados
- Detecção CAPTCHA do console do navegador
- Mecanismo de retorno de chamada reCAPTCHA v2
- reCAPTCHA v2 Invisível: Detecção de gatilho