Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти 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 Copy
<!-- Обычная 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 Copy
<div class="g-recaptcha" 
     data-sitekey="6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b"
     data-action="login"
     data-callback="onVerify">
</div>

Значение data-sitekey копируете в websiteKey, значение data-action — в pageAction.

Если разметка генерируется динамически или скрыта, помогает скрипт в консоли разработчика:

javascript Copy
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 Copy
{
    "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 для финального запроса к целевому сайту, настраивайте его уже в своем клиенте после получения токена.

Порядок работы: от получения токена до отправки запроса

Процесс линейный и не требует сложных обвязок:

  1. Получаете API-ключ в личном кабинете 2Captcha
  2. Вытаскиваете sitekey, action и URL целевой страницы
  3. Отправляете задачу с флагом isEnterprise: true
  4. Опросом ждете статуса ready
  5. Забираете токен и сразу подставляете его в свой запрос

Ключевой момент — не затягивать с отправкой. Токен reCAPTCHA v3 живет около двух минут. Если опоздать, сайт отклонит его как просроченный.

Код с SeleniumBase

python Copy
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 Copy
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

Полезные ссылки

Заключение

Обход v3 Enterprise через 2Captcha сводится к трем вещам: правильно определить версию капчи, отправить задачу с флагом isEnterprise и не тянуть с подстановкой токена. Поскольку прокси и userAgent в самой задаче не работают, весь фокус смещается на вашу сторону: резидентские IP, маскировка отпечатков и точное совпадение action. Если держать эти моменты под контролем, капча будет решаться стабильно, а баланс расходоваться разумно.