Solución de Problemas

ERROR_WRONG_GOOGLEKEY: Guía completa de diagnóstico y reparación

Si CaptchaAI te responde con ERROR_WRONG_GOOGLEKEY, casi siempre hay una sola causa detrás: el sitekey que enviaste no corresponde a la página que intentas resolver. Es de los errores más fáciles de diagnosticar, porque basta con confirmar de dónde salió esa clave y si coincide con el formulario real. Aquí tienes por qué ocurre y cómo corregirlo, con código listo para copiar.

¿Por qué aparece ERROR_WRONG_GOOGLEKEY?

El error viene siempre del parámetro googlekey. Estas son las causas que concentran la mayoría de los casos:

Causa probable Cómo reconocerla
Extrajiste el sitekey equivocado No coincide con el que aparece en el código fuente
Enviaste una clave Enterprise como estándar Falta el parámetro enterprise=1
La clave es de reCAPTCHA invisible Falta el parámetro invisible=1
El sitekey cambió tras extraerlo El sitio rota la clave de forma dinámica
Tomaste el sitekey de otra página Salió de un iframe o de un dominio distinto
Clave obsoleta escrita a mano Antes funcionaba y dejó de hacerlo

Cómo localizar el sitekey correcto

Método 1: buscar en el código fuente de la página

La vía más rápida es leer el HTML del servidor y buscar el sitekey con varios patrones, porque no todos los sitios lo exponen igual:

import re
import requests


def extract_sitekey(page_url):
    """Extract reCAPTCHA sitekey from page source."""
    resp = requests.get(page_url, timeout=15)
    html = resp.text

    # Pattern 1: data-sitekey attribute
    match = re.search(r'data-sitekey="([^"]+)"', html)
    if match:
        return match.group(1)

    # Pattern 2: grecaptcha.render call
    match = re.search(r"grecaptcha\.render\([^,]+,\s*\{[^}]*sitekey['\"]?\s*:\s*['\"]([^'\"]+)", html)
    if match:
        return match.group(1)

    # Pattern 3: grecaptcha.execute call
    match = re.search(r"grecaptcha\.execute\(['\"]([^'\"]+)", html)
    if match:
        return match.group(1)

    # Pattern 4: reCAPTCHA script src
    match = re.search(r"recaptcha/api\.js\?render=([^&\"]+)", html)
    if match:
        return match.group(1)

    return None


sitekey = extract_sitekey("https://staging.example.com/qa-login")
print(f"Sitekey: {sitekey}")

Método 2: inspeccionar con las herramientas de desarrollo

Si el código fuente no basta, revísalo directamente en el navegador:

  1. Abre la página objetivo en Chrome.
  2. Pulsa F12 y ve a la pestaña Elementos.
  3. Con Ctrl+F, busca sitekey.
  4. Localiza el atributo data-sitekey="...".
  5. Copia el valor: una cadena alfanumérica de unos 40 caracteres.

Método 3: rastrear la pestaña Red

Cuando el widget se monta por completo en JavaScript, la clave viaja en las peticiones al servicio de Google:

  1. Abre F12 y entra en la pestaña Red.
  2. Filtra por recaptcha.
  3. Busca las peticiones a google.com/recaptcha/api2/anchor.
  4. En la URL, el parámetro k= contiene el sitekey.

Valida el sitekey antes de enviarlo

Un chequeo de formato te ahorra una llamada perdida a la API cuando la extracción devuelve algo vacío o corrupto:

import re


def validate_sitekey(sitekey):
    """Validate sitekey format before API call."""
    if not sitekey:
        raise ValueError("Sitekey is empty")

    # Standard format: 40 alphanumeric + hyphens/underscores
    if not re.match(r'^[a-zA-Z0-9_-]{20,60}$', sitekey):
        raise ValueError(f"Invalid sitekey format: {sitekey}")

    return True


# Use before solving
sitekey = extract_sitekey("https://staging.example.com/qa-login")
validate_sitekey(sitekey)

reCAPTCHA Enterprise: el flag que casi nadie recuerda

Las claves de Enterprise se ven idénticas a las estándar, así que es fácil enviarlas sin marcar y recibir ERROR_WRONG_GOOGLEKEY. CaptchaAI resuelve reCAPTCHA estándar y Enterprise (v2 y v3); solo tienes que indicar cuál es con el parámetro enterprise. La pista está en el script: enterprise.js en lugar de api.js.

import requests

# Standard reCAPTCHA — loads via recaptcha/api.js
# Enterprise reCAPTCHA — loads via recaptcha/enterprise.js

def detect_enterprise(page_url):
    """Detect if page uses reCAPTCHA Enterprise."""
    resp = requests.get(page_url, timeout=15)
    return "recaptcha/enterprise.js" in resp.text


# Submit with enterprise flag
is_enterprise = detect_enterprise("https://example.com")

data = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": "https://example.com",
    "json": 1,
}

if is_enterprise:
    data["enterprise"] = 1

resp = requests.post("https://ocr.captchaai.com/in.php", data=data)

reCAPTCHA invisible: cuándo añadir invisible=1

La variante invisible no muestra la casilla clásica, sino que se dispara con grecaptcha.execute(). Si envías su clave como si fuera estándar, la validación no cuadra. Detéctala por sus señales y añade el flag invisible:

def detect_invisible(html):
    """Detect invisible reCAPTCHA."""
    indicators = [
        'data-size="invisible"',
        "grecaptcha.execute(",
        "recaptcha/api.js?render=",
    ]
    return any(i in html for i in indicators)


# Submit with invisible flag
data = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": "https://example.com",
    "invisible": 1,
    "json": 1,
}

Sitekeys que se cargan por JavaScript

Algunos formularios montan el widget de reCAPTCHA después de cargar la página, así que una petición con requests devuelve un sitekey vacío. Es habitual al automatizar el QA de un portal de cita previa o el seguimiento de precios en un marketplace tipo MercadoLibre. Ahí, renderiza la página con un navegador y extrae la clave del DOM ya montado:

from selenium import webdriver
from selenium.webdriver.common.by import By


def extract_dynamic_sitekey(url):
    """Extract sitekey from JavaScript-rendered page."""
    driver = webdriver.Chrome()
    driver.get(url)

    # Wait for reCAPTCHA to load
    import time
    time.sleep(3)

    # Try data-sitekey attribute
    elements = driver.find_elements(By.CSS_SELECTOR, "[data-sitekey]")
    if elements:
        sitekey = elements[0].get_attribute("data-sitekey")
        driver.quit()
        return sitekey

    # Try iframe src parameter
    iframes = driver.find_elements(By.CSS_SELECTOR, "iframe[src*='recaptcha']")
    for iframe in iframes:
        src = iframe.get_attribute("src")
        import re
        match = re.search(r'[?&]k=([^&]+)', src)
        if match:
            driver.quit()
            return match.group(1)

    driver.quit()
    return None

Tabla de diagnóstico rápido

Síntoma Causa probable Qué hacer
La clave parece correcta pero el error sigue Es una clave Enterprise Añade enterprise=1
La clave cambia entre visitas sitekey dinámico Extrae uno nuevo en cada intento
Hay varios sitekeys en la página Elegiste el que no era Empareja la clave con el formulario correcto
La clave sale de un iframe de CDN Clave de otro dominio Extrae desde la página principal, no del iframe
El sitekey extraído viene vacío La página lo carga por JavaScript Usa Selenium para extraerlo

Preguntas frecuentes

¿ERROR_WRONG_GOOGLEKEY significa que mi API key es incorrecta?

No. Este error apunta al googlekey (el sitekey del sitio), no a tu clave de CaptchaAI. Si tu API key fuera inválida, verías un error de autenticación distinto. Revisa primero el sitekey.

¿El mismo sitekey sirve para reCAPTCHA v2 y v3?

No. La v2 y la v3 usan sitekeys diferentes. Confirma la versión mirando el script de reCAPTCHA que carga la página antes de reutilizar una clave.

¿Con qué frecuencia debo volver a extraer el sitekey?

Depende del sitio. Puedes cachearlo unos minutos u horas, pero si el portal rota la clave de forma dinámica y la resolución empieza a fallar, extrae uno nuevo en cada intento.

¿CaptchaAI resuelve reCAPTCHA Enterprise sin configuración extra?

Sí, siempre que marques la petición con enterprise=1. La clave se ve igual que una estándar, así que el flag es lo único que distingue una de otra ante la API.

Guías relacionadas

Consigue el sitekey correcto y resuélvelo con CaptchaAI.

Los comentarios están deshabilitados para este artículo.