Эта статья была полезной?
Как обойти reCAPTCHA v2 Enterprise
Технический специалист
Введение
reCAPTCHA v2 Enterprise выглядит для пользователя почти так же, как обычная v2: та же галочка «Я не робот» или невидимый бейдж. Но под капотом это совершенно другая система. Вместо стандартного API проверки Google использует Google Cloud reCAPTCHA Enterprise API. Это дает владельцам сайтов доступ к продвинутой аналитике, более гибким правилам блокировки и, что важнее всего для разработчиков, к более строгой оценке риска.
Для автоматизации и парсинга это означает, что простого получения токена может быть недостаточно. Если IP-адрес, User-Agent или поведение выглядят подозрительно, Enterprise-система может принять токен, но все равно заблокировать запрос или потребовать дополнительную проверку.
В этом руководстве мы разберем, как стабильно решать reCAPTCHA v2 Enterprise с помощью API 2Captcha. Мы рассмотрим, как отличить Enterprise от обычной версии, какие специфические параметры (вроде data-s) нужно извлекать и как правильно настроить задачу, чтобы избежать блокировок.
Ключевые отличия v2 от v2 Enterprise
Понимание различий помогает правильно настроить запрос к API.
| Характеристика | reCAPTCHA v2 (Standard) | reCAPTCHA v2 Enterprise |
|---|---|---|
| Источник скрипта | api.js | enterprise.js (или api.js?render=enterprise) |
| Метод инициализации | grecaptcha.render() | grecaptcha.enterprise.render() |
| Дополнительные параметры | Редко требуются | Часто используется динамический параметр data-s |
| Флаг в API 2Captcha | isEnterprise: false (или отсутствует) | isEnterprise: true |
| Строгость проверки | Стандартная | Повышенная, часто требует совпадения IP и UA |
Необходимые параметры для API 2Captcha
Для решения v2 Enterprise используется тот же тип задачи, что и для обычной v2, но с обязательным флагом Enterprise и, часто, дополнительным параметром data-s.
Обязательные параметры
| Параметр | Описание | Пример |
|---|---|---|
| type | RecaptchaV2TaskProxyless или RecaptchaV2Task | "RecaptchaV2TaskProxyless" |
| websiteURL | Полный URL страницы с капчей | "https://target-site.com/login" |
| websiteKey | Значение атрибута data-sitekey | "6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b" |
| isEnterprise | Флаг, указывающий на Enterprise-версию | true |
Критически важный дополнительный параметр
| Параметр | Описание | Пример |
|---|---|---|
| recaptchaDataSValue | Значение атрибута data-s. Многие Enterprise-сайты генерируют этот токен динамически на бэкенде и требуют его передачи при решении. | "03AGdBq24PxK..." |
Параметры прокси (рекомендуется для строгих сайтов)
Если сайт строго проверяет репутацию IP, использование типа задачи RecaptchaV2Task с вашим резидентским прокси значительно повышает шансы на успех.
| Параметр | Описание | Пример |
|---|---|---|
| proxyType | http, socks4 или socks5 | "http" |
| proxyAddress | IP-адрес прокси | "198.51.100.1" |
| proxyPort | Порт прокси | 8080 |
| proxyLogin | Логин (если есть) | "user" |
| proxyPassword | Пароль (если есть) | "pass" |
Как определить reCAPTCHA v2 Enterprise и найти параметры
Шаг 1: Проверка источника скрипта
Откройте целевую страницу, нажмите F12 и перейдите на вкладку Network. Отфильтруйте запросы по слову recaptcha.
Если вы видите загрузку скрипта с enterprise.js или api.js?render=enterprise, перед вами Enterprise-версия.
Шаг 2: Поиск sitekey и data-s
Перейдите на вкладку Elements и найдите элемент с классом g-recaptcha. В Enterprise-версии он часто выглядит так:
html
<div class="g-recaptcha"
data-sitekey="6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b"
data-s="03AGdBq24PxK...динамическое_значение..."
data-callback="onSubmit"
data-size="invisible">
</div>
Скопируйте значение data-sitekey в параметр websiteKey.
Если присутствует атрибут data-s, скопируйте его значение в параметр recaptchaDataSValue.
Шаг 3: Динамическое извлечение data-s (если нужно)
Часто значение data-s генерируется JavaScript при загрузке страницы. Если в исходном коде его нет, его можно перехватить. Откройте вкладку Network, обновите страницу и найдите запрос, который получает этот токен (часто это запрос к внутреннему API сайта перед инициализацией капчи), или найдите его в глобальных переменных через консоль:
javascript
// Пример поиска data-s в глобальной области видимости или конфигурации
console.log(window.RECAPTCHA_DATA_S); // Имя переменной может отличаться
Если сайт получает его через XHR-запрос, проще всего сделать этот запрос заранее в вашем скрипте, получить значение data-s и передать его в задачу 2Captcha.
Пример JSON-запроса к API
Вот как выглядит корректный payload для отправки задачи в 2Captcha:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://target-site.com/login",
"websiteKey": "6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b",
"isEnterprise": true,
"recaptchaDataSValue": "03AGdBq24PxK...динамическое_значение..."
}
}
Если сайт очень строгий, замените тип на RecaptchaV2Task и добавьте объект proxy с вашими данными.
Алгоритм обхода
- Получите API-ключ в кабинете 2Captcha.
- Откройте целевую страницу (через браузер или HTTP-клиент) и извлеките websiteKey и, если есть, data-s.
- Отправьте задачу в createTask с флагом isEnterprise: true.
- Опросите getTaskResult с интервалом 5 секунд.
- Получив gRecaptchaResponse, внедрите его в форму или вызовите callback-функцию.
- Отправьте финальный запрос, убедившись, что IP и User-Agent совпадают с теми, что использовались при решении (если вы использовали прокси в задаче).
Пример кода: Python + SeleniumBase (с прокси)
Если сайт отклоняет proxyless-решения, используйте свой прокси напрямую в задаче.
python
from seleniumbase import SB
import time
import requests
API_KEY = "YOUR_API_KEY"
SITE_KEY = "6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b"
PAGE_URL = "https://target-site.com/login"
def solve_via_api_with_proxy(sitekey, url, proxy_info):
payload = {
"clientKey": API_KEY,
"task": {
"type": "RecaptchaV2Task", # Используем тип с прокси
"websiteURL": url,
"websiteKey": sitekey,
"isEnterprise": True,
"proxyType": proxy_info["type"],
"proxyAddress": proxy_info["address"],
"proxyPort": proxy_info["port"],
"proxyLogin": proxy_info.get("login"),
"proxyPassword": proxy_info.get("password")
}
}
task = requests.post("https://api.2captcha.com/createTask", json=payload).json()
task_id = task["taskId"]
while True:
time.sleep(5)
result = requests.post(
"https://api.2captcha.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
).json()
if result["status"] == "ready":
return result["solution"]["gRecaptchaResponse"]
# Настройки вашего прокси
my_proxy = {
"type": "http",
"address": "198.51.100.1",
"port": 8080,
"login": "user",
"password": "pass"
}
with SB(uc=True, headless=False, proxy=f"{my_proxy['address']}:{my_proxy['port']}") as sb:
sb.open(PAGE_URL)
time.sleep(3)
print("Решение reCAPTCHA v2 Enterprise с прокси...")
token = solve_via_api_with_proxy(SITE_KEY, sb.get_current_url(), my_proxy)
print(f"Токен: {token[:40]}...")
# Внедрение токена в скрытое поле
sb.execute_script(f"document.getElementById('g-recaptcha-response').value = '{token}';")
# Нажатие кнопки отправки (или вызов callback, если требуется)
sb.click('button[type="submit"]')
time.sleep(5)
if "success" in sb.get_page_source().lower():
print("Успешно пройдено")
else:
print("Возможна блокировка или ошибка валидации")
Почему Enterprise строже и как это обойти
Главная проблема v2 Enterprise не в самом процессе решения капчи, а в последующей валидации запроса. Google сверяет окружение, в котором был получен токен, с окружением финального запроса.
- Несовпадение IP: Если токен решен через внутренний пул 2Captcha (Proxyless), а ваш финальный запрос идет с вашего домашнего или датацентрового IP, Enterprise может это заметить.
Решение: Если сайт строгий, используйте тип задачи RecaptchaV2Task и передавайте туда данные вашего резидентского прокси. Тогда токен будет решен с того же IP, с которого пойдет запрос. - Отсутствие data-s: Игнорирование этого параметра на сайтах, которые его требуют, гарантированно приводит к ошибке валидации на стороне бэкенда сайта.
- Детект автоматизации: Если вы используете Selenium без модификаций, Enterprise это увидит.
Решение: Используйте UC Mode в SeleniumBase или библиотеки вроде curl_cffi для маскировки TLS-отпечатков при запросах без браузера.
Типичные ошибки
| Код ошибки | Причина | Решение |
|---|---|---|
| ERROR_WRONG_USER_KEY | Неверный API-ключ | Проверьте ключ в личном кабинете 2Captcha |
| ERROR_CAPTCHA_UNSOLVABLE | Неправильные параметры | Убедитесь, что isEnterprise: true, сайткей верный, и передан data-s, если он есть |
| ERROR_PROXY_CONNECT_REFUSED | Проблема с прокси | Проверьте работоспособность прокси, попробуйте другой |
| Токен не принимается сайтом | Низкая репутация IP или детект бота | Переключитесь на RecaptchaV2Task с резидентским прокси, добавьте задержки |
Лучшие практики
- Всегда начинайте с RecaptchaV2TaskProxyless. Если сайт принимает решение, нет смысла усложнять схему прокси.
- Если получаете отказы, первым делом проверьте, не требует ли сайт параметр data-s. Его отсутствие — самая частая причина тихих отказов.
- Для критически важных задач используйте RecaptchaV2Task с качественными резидентскими прокси. Это синхронизирует IP при решении и при отправке запроса.
- Синхронизируйте User-Agent. Если вы передаете прокси в задачу, убедитесь, что ваш браузер или HTTP-клиент использует тот же User-Agent.
- Добавьте случайные задержки (2-5 секунд) между загрузкой страницы, решением капчи и отправкой формы. Мгновенные действия — красный флаг для Enterprise.
Готовые библиотеки
2Captcha предоставляет официальные SDK, которые упрощают интеграцию и берут на себя опрос статуса задачи.
- Python: https://github.com/2captcha/2captcha-python
- Node.js: https://github.com/2captcha/2captcha-node
- PHP: https://github.com/2captcha/2captcha-php
- Java: https://github.com/2captcha/2captcha-java
- C#: https://github.com/2captcha/2captcha-csharp
- Go: https://github.com/2captcha/2captcha-go
- Ruby: https://github.com/2captcha/2captcha-ruby
Пример на Python SDK:
python
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
result = solver.recaptcha(
sitekey='6Lel38UnAAAAAMRwKj9qLH2Ws4Tf2uTDQCyfgR6b',
url='https://target-site.com/login',
enterprise=True,
data_s='03AGdBq24PxK...' # Передача data-s через SDK
)
print(f"Решено: {result['code']}")
Полезные ссылки
- Документация API 2Captcha: https://rucaptcha.com/api-docs
- Демо-страница для тестов: https://rucaptcha.com/demo/
- Примеры кода на GitHub: https://github.com/2captcha
- Служба поддержки: https://rucaptcha.com/support/tickets/new
Заключение
Обход reCAPTCHA v2 Enterprise через 2Captcha технически мало отличается от обычной v2, но требует большей внимательности к деталям. Ключ к успеху лежит в трех вещах: правильной установке флага isEnterprise: true, обязательном извлечении и передаче параметра data-s (если сайт его использует) и синхронизации сетевого окружения (IP и User-Agent) между моментом решения капчи и финальным запросом. Следуя этим правилам, вы сможете стабильно автоматизировать взаимодействие со строгими защищенными ресурсами.