API 教程

如何使用 API 解决 reCAPTCHA v2 Enterprise

reCAPTCHA v2 Enterprise 使用与标准 v2 相同的复选框质询,但它通过 Google 的 Enterprise API 而不是公共 siteverify 端点来验证令牌。通过 CaptchaAI 的求解过程几乎相同 - 您添加一个参数:enterprise=1

本指南逐步介绍使用 Python 和 Node.js 代码进行检测、参数提取和求解。

不确定您面对的是企业版还是标准版? 阅读如何识别 reCAPTCHA 企业实施第一的。


开始之前您需要什么

要求 细节
CaptchaAI API 密钥 获取一份captchaai.com/api.php
目标页面网址 reCAPTCHA 显示的完整 URL
站点密钥 来自 data-sitekey 属性
企业旗帜 通过 enterprise.js 脚本标签确认
data-s 值(如果存在) 某些企业实施上的可选附加令牌

第1步:检测企业实施

检查这些指标的页面源:

// Enterprise script tag (NOT api.js)
// <script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>

// Enterprise JavaScript object
// grecaptcha.enterprise.render(...)
// grecaptcha.enterprise.execute(...)

如果您看到 enterprise.jsgrecaptcha.enterprise,则为 Enterprise。如果你看到api.jsgrecaptcha,那就是标准的。

第2步:提取参数

# Sitekey: from data-sitekey attribute
# <div class="g-recaptcha" data-sitekey="6LcR_RsTAAAA..." data-s="..."></div>

# Or from enterprise.js render parameter
# https://www.google.com/recaptcha/enterprise.js?render=6LcR_RsTAAAA...

还要检查 data-s — 某些企业实现需要的附加会话令牌。

第三步:提交至CaptchaAI

import requests

params = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
    "pageurl": "https://staging.example.com/qa-login",
    "enterprise": 1,  # Required for Enterprise
    "json": 1
}

# Include data-s if present on the page
# params["data-s"] = "data-s-value-from-page"

response = requests.get("https://ocr.captchaai.com/in.php", params=params)
data = response.json()
task_id = data["request"]
print(f"Task ID: {task_id}")
const params = new URLSearchParams({
  key: "YOUR_API_KEY",
  method: "userrecaptcha",
  googlekey: "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
  pageurl: "https://staging.example.com/qa-login",
  enterprise: 1,
  json: 1,
});

const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const data = await res.json();
console.log(`Task ID: ${data.request}`);

第四步:投票结果

import time

for _ in range(40):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY",
        "action": "get",
        "id": task_id,
        "json": 1
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"Token: {token[:50]}...")
        break
    if result.get("request") != "CAPCHA_NOT_READY":
        raise RuntimeError(f"Error: {result['request']}")
let token;
for (let i = 0; i < 40; i++) {
  await new Promise((r) => setTimeout(r, 5000));
  const res = await fetch(
    `https://ocr.captchaai.com/res.php?${new URLSearchParams({
      key: "YOUR_API_KEY", action: "get", id: taskId, json: 1,
    })}`
  );
  const data = await res.json();
  if (data.status === 1) { token = data.request; break; }
  if (data.request !== "CAPCHA_NOT_READY") throw new Error(data.request);
}

第5步:注入令牌

token 提交与标准 v2 相同:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://staging.example.com/qa-login")

# Inject token into hidden field
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").innerHTML = "{token}";'
)

# Check for callback
callback = driver.execute_script(
    'var el = document.querySelector(".g-recaptcha"); '
    'return el ? el.getAttribute("data-callback") : null;'
)
if callback:
    driver.execute_script(f'{callback}("{token}");')
else:
    driver.find_element("css selector", "form").submit()

完整的工作示例

import requests
import time

def solve_recaptcha_v2_enterprise(api_key, sitekey, page_url, data_s=None):
    params = {
        "key": api_key, "method": "userrecaptcha",
        "googlekey": sitekey, "pageurl": page_url,
        "enterprise": 1, "json": 1
    }
    if data_s:
        params["data-s"] = data_s

    submit = requests.get("https://ocr.captchaai.com/in.php", params=params).json()
    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]

    for _ in range(40):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result.get('request')}")

    raise TimeoutError("Solve timed out after 200s")

# Usage
token = solve_recaptcha_v2_enterprise("YOUR_API_KEY", "6LcR_RsTAAAA...", "https://staging.example.com/qa-login")
print(f"Solved: {token[:50]}...")

完整的可运行示例

需要一个包含环境设置、轮询、重试和错误处理的完整工作项目吗?

请参阅 GitHub 上的完整可运行示例 →


常问问题

标准 API 调用和企业 API 调用之间的唯一区别是什么?

enterprise=1 添加到您的 CaptchaAI 请求中。其他一切——方法名称、sitekey 参数、轮询——都是相同的。

什么时候需要data-s参数?

仅当页面在 reCAPTCHA div 上包含 data-s 属性时。大多数企业实现不使用它。检查 HTML 源。

CaptchaAI 企业版的收费是否不同?

查看验证码网站对于当前定价。企业解决方案可能使用不同的线程数。

企业代币可以重复使用吗?

不会。与标准 v2 一样,企业令牌是一次性的,并在大约 2 分钟后过期。

我如何知道我的企业解决方案是否失败?

如果目标站点在token 提交后仍然阻止您,请验证:(1) 您包含了 enterprise=1,(2) 站点密钥是否正确,(3) 包含了 data-s(如果存在),(4) 令牌在 2 分钟内使用。


开始解决reCAPTCHA v2 Enterprise

获取您的 API 密钥:captchaai.com/api.php。将 enterprise=1 添加到您现有的 reCAPTCHA v2 求解代码中,您就准备好了。


相关指南

该文章已禁用评论。