Если в исходнике страницы видно grecaptcha.enterprise.execute вместо привычного grecaptcha.render, значит перед вами reCAPTCHA v2 Enterprise, а не обычная v2. Решается она через CaptchaAI почти так же — запрос отличается всего одним параметром: enterprise=1.
В этом руководстве — как отличить Enterprise-виджет от стандартного, откуда взять sitekey и необязательный data-s, и рабочий код на Python и Node.js для полного цикла: отправка задачи → опрос результата → внедрение токена на странице.
Не уверены, что перед вами именно Enterprise? Сначала прочитайте как определить внедрение reCAPTCHA Enterprise.
Что нужно подготовить заранее
| Требование | Детали |
|---|---|
| API-ключ CaptchaAI | Получите на captchaai.com/api.php |
| URL целевой страницы | Полный адрес страницы, где отображается reCAPTCHA |
| Sitekey | Значение атрибута data-sitekey |
| Признак Enterprise | Подтверждается тегом скрипта enterprise.js |
Значение data-s (если есть) |
Дополнительный токен, который требуют некоторые Enterprise-реализации |
Шаг 1. Определите: Enterprise перед вами или обычная v2
Откройте исходный код страницы и поищите такие признаки:
// 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.js или grecaptcha.enterprise — это Enterprise. Если встречаются api.js и просто grecaptcha — перед вами стандартная версия.
Быстрая проверка без просмотра исходников
- В DevTools → Network найдите запрос к
enterprise.js. - В консоли браузера выполните
typeof grecaptcha.enterprise— ответ"object"подтверждает Enterprise.
Шаг 2. Извлеките sitekey и data-s
# 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 — некоторым Enterprise-реализациям нужен второй токен сессии, без которого решение не примут.
Если data-s нет на странице
Просто не передавайте этот параметр в запросе — пустое значение CaptchaAI не требуется, а лишний ключ пользы не добавит.
Шаг 3. Отправьте запрос в CaptchaAI с enterprise=1
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}`);
Успешный ответ in.php содержит не сам токен, а request с ID задачи — сам токен reCAPTCHA вы получите на следующем шаге, опросив res.php.
| Параметр | Стандартная v2 | Enterprise |
|---|---|---|
method |
userrecaptcha |
userrecaptcha (без изменений) |
googlekey |
sitekey со страницы | тот же sitekey со страницы |
enterprise |
не передаётся | 1 |
data-s |
обычно не требуется | передайте, если атрибут есть на странице |
Шаг 4. Опросите res.php до получения токена
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);
}
Решение reCAPTCHA v2 Enterprise обычно укладывается в 60 секунд при высокой конкурентности запросов — так же, как у стандартной reCAPTCHA v2. Если первый прогон занимает заметно дольше, чаще всего дело в слишком редком опросе
res.php, а не в самой задаче.
Шаг 5. Внедрите токен на странице
Способ внедрения не отличается от стандартной 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()
Если после отправки токена целевая страница по-прежнему показывает CAPTCHA, проверьте по порядку:
- Включён ли
enterprise=1в запросе. - Совпадает ли sitekey с атрибутом
data-sitekeyна странице. - Передан ли
data-s, если он присутствует в разметке. - Не истекли ли ~2 минуты жизни токена с момента получения от
res.php.
Часто задаваемые вопросы
Нужен ли отдельный API-ключ для Enterprise?
Нет — используется тот же API-ключ CaptchaAI и тот же баланс потоков, что и для обычной reCAPTCHA v2. Меняется только один параметр запроса: enterprise=1.
Чем reCAPTCHA v2 Enterprise отличается от v3 Enterprise?
v2 Enterprise — тот же чекбокс-виджет, что и в обычной v2, но токен проверяется через Enterprise API Google вместо публичного siteverify. v3 Enterprise работает без виджета и возвращает числовой score вместо токена подтверждения. CaptchaAI решает оба варианта, но структура запроса и обработка результата у них разные.
Работает ли тот же подход для invisible-варианта Enterprise?
Да. reCAPTCHA v2 Invisible Enterprise отправляется в CaptchaAI тем же методом userrecaptcha с параметром enterprise=1 — чекбокс не показывается, но sitekey и логика решения не меняются.
Нужно ли менять способ внедрения токена для Enterprise?
Нет. Запись токена в скрытое поле g-recaptcha-response и вызов callback-функции, если она есть, — идентичны стандартной v2 (см. шаг 5 выше). Enterprise влияет на то, как токен запрашивается и проверяется, а не на то, как он передаётся на странице.
Можно ли использовать токен reCAPTCHA v2 Enterprise повторно?
Нет. Как и в стандартной v2, токен Enterprise одноразовый и действует примерно 2 минуты — используйте его сразу после получения от res.php.
Отличается ли цена CaptchaAI для Enterprise?
Нет отдельного тарифа под Enterprise — тарификация CaptchaAI единая для всех вариантов reCAPTCHA, по числу потоков в долларах. Актуальные цены и лимиты потоков уточняйте на captchaai.com, условия могут обновляться.
Готовый код целиком
Ниже — самодостаточная функция: отправка задачи, опрос и обработка ошибок в одном месте. Такую обёртку удобно вставить прямо в воркер или CI-скрипт.
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]}...")
Нужен полный проект с обработкой ошибок?
Нужен целиком рабочий проект — с настройкой окружения, повторными попытками и обработкой ошибок из коробки?
- Склонируйте репозиторий с примерами.
- Задайте переменную окружения со своим API-ключом CaptchaAI.
- Запустите скрипт для reCAPTCHA v2 Enterprise —
enterprise=1там уже включён.
Смотрите полный пример на GitHub →
Пример: сколько потоков закладывать под Enterprise
Сценарий: QA-автотесты логина в CI
Частый сценарий — QA-команда гоняет автотесты логина через staging-окружение с reCAPTCHA v2 Enterprise (см. staging.example.com/qa-login в примерах выше). Для одного CI-пайплайна хватает тарифа BASIC ($15/мес, 5 потоков). Для параллельных прогонов в нескольких окружениях логичнее взять ADVANCE ($90/мес, 50 потоков) — иначе задачи встанут в очередь. Помесячная оплата в долларах не зависит от количества перезапусков из-за нестабильных тестов, так что бюджет предсказуем даже при частых ретраях в CI.
Готовы подключить Enterprise?
Получите API-ключ на captchaai.com/api.php, добавьте enterprise=1 к своему рабочему коду решения reCAPTCHA v2 — и Enterprise-виджет решается тем же пайплайном.
Связанные материалы
- Как определить внедрение reCAPTCHA Enterprise
- Частые ошибки reCAPTCHA v2 Enterprise
- Как решить обычную reCAPTCHA v2 через API
- Standard или Enterprise: в чём разница