ERROR_WRONG_GOOGLEKEY 表示googlekey 参数无效或与目标页面不匹配。本指南涵盖了所有原因和修复方法。
导致此错误的原因是什么
| 原因 | 如何识别 |
|---|---|
| 提取的站点密钥不正确 | 键与页面源不匹配 |
| 作为标准发送的企业站点密钥 | 需要enterprise=1参数 |
| 看不见的 reCAPTCHA 密钥不匹配 | 需要invisible=1参数 |
| 动态站点密钥已更改 | 钥匙自提取后轮换 |
| 页面的 sitekey 错误 | 从 iframe 或不同域中提取 |
| 硬编码过时的站点密钥 | 密钥之前有效 |
如何找到正确的 Sitekey
方法一:页面源码搜索
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}")
方法2:浏览器开发工具
- 在 Chrome 中打开目标页面
- 按 F12 → 元素 选项卡
- 按 Ctrl+F 并搜索
sitekey - 查找
data-sitekey="..."属性 - 复制值(40 个字符的字母数字字符串)
方法 3:网络选项卡
- 打开 F12 → 网络 选项卡
- 按
recaptcha筛选 - 查找对
google.com/recaptcha/api2/anchor的请求 - 在 URL 中找到
k=参数 — 这就是 sitekey
提交前验证
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
企业站点密钥看起来相同,但需要 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
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,
}
动态站点密钥提取
有些网站通过 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
故障排除
| 问题 | 原因 | 处理方式 |
|---|---|---|
| 密钥看起来正确,但错误仍然存在 | 企业站点密钥 | 添加enterprise=1 |
| 两次访问之间的主要变化 | 动态站点密钥 | 每次提取新的密钥 |
| 页面上有多个站点键 | 选错了一项 | 将密钥与正确的形式匹配 |
| 来自 CDN iframe 的密钥 | 域密钥错误 | 从主页提取,而不是 iframe |
| 提取了空站点密钥 | JavaScript 渲染 | 使用硒提取 |
常问问题
有效的站点密钥是什么样的?
reCAPTCHA 站点密钥通常由 40 个字母数字文本加连字符组成。示例:6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-。
相同的 sitekey 可以同时适用于 v2 和 v3 吗?
不会。v2 和 v3 使用不同的 sitekey。检查 reCAPTCHA 脚本源以确定版本。
我应该缓存站点密钥吗?
短期缓存(几分钟到几小时)。有些网站会轮换密钥。如果解决开始失败,请重新提取站点密钥。
相关指南
获取正确的站点密钥 —用CaptchaAI解决.