Troubleshooting

ERROR_WRONG_GOOGLEKEY:完整诊断和修复指南

sitekey 明明复制对了,CaptchaAI 还是返回 ERROR_WRONG_GOOGLEKEY?多数是三个原因:提错了、页面其实是 Enterprise、或 sitekey 动态加载。按下表定位,对号修复。


报错原因与处理方式速查

原因 怎么判断 处理方式
sitekey 提取错了 与页面源码不一致 用方法一 / 二核对
Enterprise 按标准方式提交 加载 recaptcha/enterprise.js enterprise=1
隐形 reCAPTCHA 用错参数 无勾选框,含 grecaptcha.execute( invisible=1
sitekey 已轮换 两次抓取结果不一样 每次提交前重新提取
抓到 iframe / 别页面的 key 来源域名不一致 从主页面提取
提取结果是空的 页面 JS 渲染 sitekey 换浏览器渲染方案
硬编码了旧 sitekey 之前能用,现在失效 改成每次现取

提取并校验 sitekey

先拿到正确 sitekey,再校验格式——三步做完能排除大半 ERROR_WRONG_GOOGLEKEY

方法一:抓页面源码

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}")

适合静态页面;国内网络访问 Google 资源偶尔超时,先排查网络再排查逻辑。

方法二:浏览器手动查找

抓不到源码,或想肉眼核对时用这条路:

途径 操作步骤
元素面板 F12 → Elements(元素)→ Ctrl+F 搜 sitekey → 复制 data-sitekey 属性值
Network 面板 F12 → Network(网络)→ 过滤 recaptcha → 找 google.com/recaptcha/api2/anchor 请求 → k= 即 sitekey

方法三:提交前校验格式

先校验格式再调 API,拦住"提错未发现"的情况:

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 与隐形(invisible)

reCAPTCHA Enterprise

Enterprise sitekey 跟标准版长得一样,肉眼分辨不出来,提交时必须多加 enterprise 字段:

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/enterprise.js 还是 recaptcha/api.js,不用猜。

隐形 reCAPTCHA(invisible)

隐形 reCAPTCHA 没有勾选框,很多人第一次直接按标准参数提交,结果同样报 ERROR_WRONG_GOOGLEKEY

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,
}

sitekey 由 JavaScript 动态加载时怎么办

有些页面的 sitekey 由脚本运行时插入,requests 抓源码拿不到值,要换成能跑 JavaScript 的浏览器方案:

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

跨境电商注册页尤其常见——sitekey 由框架异步渲染,换成上面这段脚本就能解决。


常见问题

ERROR_WRONG_GOOGLEKEY 和 ERROR_INVALID_SITE_KEY 是同一个错误吗?

指向同一类问题——googlekey 无效或和目标页面不匹配,处理思路一致:重新提取、核对 Enterprise / invisible 参数、排查 iframe。

页面上同时出现多个 sitekey,该提交哪一个?

先确认有几个 reCAPTCHA 组件(登录、注册往往各挂一个),再用元素面板核对 data-sitekey,别凭位置猜。

sitekey 需要缓存吗,多久重新提取一次?

可以短期缓存,几分钟到几小时。部分站点会轮换 sitekey,解题开始失败就先重新提取再重试。

用 requests 抓不到 sitekey,是正则写错了吗?

先排除页面是不是 JavaScript 动态渲染——这是最常见的原因,直接看源码,没有 sitekey 字样就换上文的浏览器渲染方案。


相关指南


拿到正确的 sitekey 之后——用 CaptchaAI 提交识别

该文章已禁用评论。