Эта статья была полезной?
Как обойти reCAPTCHA v3 Enterprise
Технический специалист
Введение
Если вы занимаетесь автоматизацией, парсингом или тестированием веб-приложений, то наверняка сталкивались с reCAPTCHA v3 Enterprise. Это не та капча, где нужно кликнуть по галочке или выбрать светофоры на картинках. Здесь всё работает в фоне: скрипт собирает данные о поведении пользователя, анализирует отпечатки браузера, сетевое окружение и в итоге выдает рейтинг доверия от 0.0 до 1.0. Если рейтинг ниже порога, который настроил владелец сайта, доступ закрывается или появляется дополнительная проверка.
Для разработчика это создает конкретные сложности. Токен живет буквально пару минут. При малейшем рассинхроне между окружением, в котором сгенерирован токен, и окружением финального запроса, сайт отклоняет решение. И самое главное — Enterprise-версия использует другой метод вызова и верифицируется через Google Cloud API, а не через стандартный reCAPTCHA endpoint.
В этом руководстве разберем, как решать reCAPTCHA v3 Enterprise через сервис 2Captcha. Сразу обозначу ключевой момент: для v3 в 2Captcha работает только тип задачи RecaptchaV3TaskProxyless. Передавать прокси или userAgent в задачу нельзя. Это не техническое ограничение платформы, а следствие работы алгоритма оценки рисков от Google. Когда токен генерируется через стороннюю сеть или подставляется чужой браузерный заголовок, рейтинг доверия резко падает, и сайт отклоняет решение. Поэтому 2Captcha обрабатывает все v3-задачи через собственную инфраструктуру, а прокси и заголовки вы настраиваете уже в своем коде при отправке финального запроса.
Как отличить Enterprise от обычной v3
На практике определить версию капчи можно за минуту. Открываете целевую страницу, жмете F12, переходите на вкладку Network и фильтруете по recaptcha. Если в запросах виден enterprise.js — перед вами Enterprise-версия.
Можно просто открыть исходный код страницы и поискать подключение скрипта:
html
<!-- Обычная v3 -->
<script src="https://www.google.com/recaptcha/api.js?render=SITEKEY"></script>
<!-- Enterprise v3 -->
<script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>
Еще один признак — метод вызова в JavaScript. В обычной v3 используется grecaptcha.execute(), а в Enterprise-версии вызывается grecaptcha.enterprise.execute().
Какие параметры нужны для задачи в 2Captcha
Для отправки задачи в API 2Captcha требуется базовый набор полей. Дополнительные параметры вроде прокси, куки или userAgent в v3 не принимаются — платформа их просто проигнорирует, чтобы не снижать рейтинг доверия.
| Параметр | Описание | Пример |
|---|---|---|
| type | Всегда RecaptchaV3TaskProxyless | RecaptchaV3TaskProxyless |
| websiteURL | Полный адрес страницы с капчей | https://target-site.com/login |
| websiteKey | Значение data-sitekey из разметки | 6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b |
| minScore | Минимальный рейтинг для принятия токена | 0.9 |
| isEnterprise | Обязательно true для Enterprise-версии | true |
Дополнительно можно указать pageAction, если сайт требует точного совпадения названия действия, и apiDomain, если скрипт грузится с recaptcha.net вместо google.com. Все остальное игнорируется платформой намеренно.
Как найти sitekey и action
Sitekey и action обычно лежат в разметке страницы. В DevTools → Elements ищете div с классом g-recaptcha:
html
<div class="g-recaptcha"
data-sitekey="6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b"
data-action="login"
data-callback="onVerify">
</div>
Значение data-sitekey копируете в websiteKey, значение data-action — в pageAction.
Если разметка генерируется динамически или скрыта, помогает скрипт в консоли разработчика:
javascript
function findEnterpriseRecaptcha() {
const results = [];
const scripts = document.querySelectorAll('script[src*="recaptcha"]');
scripts.forEach(s => {
if (s.src.includes('enterprise.js')) {
results.push({ type: 'enterprise', src: s.src });
}
});
if (typeof ___grecaptcha_cfg !== 'undefined') {
Object.entries(___grecaptcha_cfg.clients).forEach(([cid, client]) => {
const sitekey = client['C']?.['k'] || client['k'];
const action = client['C']?.['C']?.['action'] || null;
const isEnterprise = client['C']?.['enterprise'] || false;
if (sitekey) {
results.push({
id: cid,
sitekey,
action,
isEnterprise,
version: isEnterprise ? 'v3-enterprise' : 'v3'
});
}
});
}
return results;
}
console.log(JSON.stringify(findEnterpriseRecaptcha(), null, 2));
Запускаете скрипт в консоли браузера на целевой странице, смотрите вывод, копируете нужные значения.
Пример JSON-запроса к API 2Captcha
Для отправки задачи используется стандартный эндпоинт {api-docs}. Вот как выглядит рабочий payload:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "https://target-site.com/login",
"websiteKey": "6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b",
"minScore": 0.9,
"pageAction": "login",
"isEnterprise": true
}
}
В ответ придет taskId. По нему опрашиваете статус через соответствующий метод API с интервалом около 5 секунд. Когда статус станет ready, забираете gRecaptchaResponse из поля solution.
Важно: никаких RecaptchaV3Task с прокси здесь нет. Если вам нужен конкретный IP для финального запроса к целевому сайту, настраивайте его уже в своем клиенте после получения токена.
Порядок работы: от получения токена до отправки запроса
Процесс линейный и не требует сложных обвязок:
- Получаете API-ключ в личном кабинете 2Captcha
- Вытаскиваете sitekey, action и URL целевой страницы
- Отправляете задачу с флагом isEnterprise: true
- Опросом ждете статуса ready
- Забираете токен и сразу подставляете его в свой запрос
Ключевой момент — не затягивать с отправкой. Токен reCAPTCHA v3 живет около двух минут. Если опоздать, сайт отклонит его как просроченный.
Код с SeleniumBase
python
from seleniumbase import SB
import time
import requests
API_KEY = "YOUR_API_KEY"
SITE_KEY = "6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b"
PAGE_URL = "https://target-site.com/login"
ACTION = "login"
MIN_SCORE = 0.9
def solve_via_api(sitekey, url, action, min_score=0.9):
payload = {
"clientKey": API_KEY,
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": url,
"websiteKey": sitekey,
"minScore": min_score,
"pageAction": action,
"isEnterprise": True
}
}
task = requests.post(f"https://api.2captcha.com/createTask", json=payload).json()
task_id = task["taskId"]
while True:
time.sleep(5)
result = requests.post(
f"https://api.2captcha.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
).json()
if result["status"] == "ready":
return result["solution"]["gRecaptchaResponse"]
with SB(uc=True, headless=False, proxy="residential-proxy:port") as sb:
sb.open(PAGE_URL)
time.sleep(3)
print("Решение reCAPTCHA v3 Enterprise...")
token = solve_via_api(SITE_KEY, sb.get_current_url(), ACTION, MIN_SCORE)
print(f"Токен: {token[:40]}...")
sb.execute_script(f"""
const field = document.getElementById('g-recaptcha-response') ||
document.querySelector('[name="g-recaptcha-response"]');
if (field) field.value = '{token}';
""")
sb.click('button[type="submit"], #login-btn, .submit-button')
time.sleep(5)
if "success" in sb.get_page_source().lower() or sb.get_current_url() != PAGE_URL:
print("Форма отправлена успешно")
else:
print("Отправка могла не удаться — проверьте рейтинг или контекст запроса")
Почему в 2Captcha нет прокси и userAgent для v3
Алгоритм Google очень чувствителен к окружению, в котором генерируется токен. Если запрос проходит через внешнюю прокси-сеть или в задачу подставляется сторонний userAgent, система видит рассинхрон и автоматически снижает скор. Поэтому 2Captcha принимает только proxyless-задачи для v3. Это позволяет поддерживать высокий скор на стороне генерации. Вы же управляете IP и заголовками уже на этапе отправки финального запроса к целевому сайту. Главное — использовать резидентские адреса, маскировать TLS-отпечатки и точно совпадать в action.
Типичные ошибки и как их решать
Ошибки делятся на две группы: от API 2Captcha и от целевого сайта. Если приходит ERROR_WRONG_USER_KEY или ERROR_ZERO_BALANCE, проверяйте ключ и баланс в личном кабинете. ERROR_NO_SLOT_AVAILABLE означает, что все воркеры заняты, просто повторите запрос через десять-пятнадцать секунд. На стороне сайта чаще всего встречается ситуация, когда токен принят, но доступ закрыт. Это низкий скор. Лечится чередованием minScore до 0.9, точным указанием pageAction или переходом на резидентские прокси в вашем клиенте. Если получаете Invalid token, скорее всего, истек срок жизни или вы перепутали название action. Иногда помогает добавить небольшую задержку перед отправкой запроса, чтобы имитировать поведение реального пользователя.
Рекомендации по настройке
За время работы с v3 Enterprise через 2Captcha вырисовывается несколько правил, которые экономят баланс и время. Всегда используйте RecaptchaV3TaskProxyless. Флаг isEnterprise не пропускайте — без него токен сгенерируется под обычную v3 и не пройдет валидацию. Точно вытаскивайте pageAction, даже одно лишнее слово в названии может уронить скор. Начинайте с minScore 0.1, если сайт начинает отклонять запросы, поднимайте до 0.9. Финальный запрос обязательно маскируйте под реальный браузер через curl_cffi или UC-режим Selenium. Прокси подключайте уже на этапе отправки токена, не пытайтесь передать их в задачу. Тестируйте логику на демо-ключах Google перед запуском в продакшн. И ведите лог успешности по каждому домену, чтобы быстро подстраивать minScore под конкретный сайт.
Готовые библиотеки
Если не хочется писать HTTP-запросы вручную, 2Captcha предоставляет официальные пакеты. Они есть под Python, Node.js, PHP, Java, C#, Go и Ruby. В Python подключение выглядит так:
python
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
result = solver.recaptcha(
sitekey='6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b',
url='https://target-site.com/login',
version='v3',
action='login',
enterprise=True,
min_score=0.9
)
token = result['code']
print(f"Решено: {token}")
Ссылки на репозитории: https://github.com/2captcha
Полезные ссылки
- Документация API 2Captcha: https://rucaptcha.com/api-docs
- Демо-страница для тестов: https://rucaptcha.com/demo/recaptcha-v3-enterprise
- Поддержка: https://rucaptcha.com/support/tickets/new
Заключение
Обход v3 Enterprise через 2Captcha сводится к трем вещам: правильно определить версию капчи, отправить задачу с флагом isEnterprise и не тянуть с подстановкой токена. Поскольку прокси и userAgent в самой задаче не работают, весь фокус смещается на вашу сторону: резидентские IP, маскировка отпечатков и точное совпадение action. Если держать эти моменты под контролем, капча будет решаться стабильно, а баланс расходоваться разумно.