Эта статья была полезной?
Как решить reCAPTCHA Enterprise V2 на сайте app.oneassembly.com с использованием Python
Введение
Эта инструкция предназначена для разработчиков, которые сталкиваются с трудностями при автоматическом решении reCAPTCHA Enterprise V2 на страницах авторизации, защищённых Auth0. Вы научитесь корректно передавать сессионно-зависимые параметры, избегать ошибки ERROR_CAPTCHA_UNSOLVABLE и получать рабочие токены через API.
Предварительные требования: базовое понимание работы HTTP-запросов, REST API и асинхронного программирования в Python.
Общие сведения
О технологии reCAPTCHA Enterprise V2
reCAPTCHA Enterprise — это расширенная версия Google reCAPTCHA, предназначенная для бизнес-критичных сценариев. В отличие от стандартной v2, Enterprise-версия:
- Требует передачи параметра
enterprise=1в запросе к API решателя - Может использовать дополнительные параметры:
action,data-s,apiDomain - Чаще применяется на страницах с повышенной защитой, включая авторизацию через Auth0
Особенности Auth0-сессий
Страницы входа на базе Auth0 генерируют уникальные URL с параметром state, например:
https://login.oneassembly.com/u/login?state=hKFo2SB1MTFkY2IyWnN6cEtwMVZ5WkloWlFCTXJvNlc0VXp1VKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEdWTDZIeElIU0RGZHV6SG9NMWpVdk1wMmM3Q1R0bjNSo2NpZNkgSnNOTlAwM3pxTDZVQUJjZHlncXFhczZySlpTdmduNzY
Этот параметр привязывает сессию к конкретному браузеру и IP. Если передать решателю базовый URL (https://app.oneassembly.com), он не увидит форму капчи и вернёт ERROR_CAPTCHA_UNSOLVABLE.
Ключевой вывод: всегда передавайте в pageurl полный динамический URL со всеми параметрами сессии.
Подготовка окружения
Установка зависимостей
Для работы потребуется:
- Python 3.7 или выше
- Библиотека
twocaptcha
Установите пакет через pip:
bash
pip install twocaptcha
Получение API-ключа
- Зарегистрируйтесь на нашем сайте
- Перейдите в раздел настроек аккаунта
- Скопируйте ваш API-ключ
- Для безопасности рекомендуется хранить ключ в переменной окружения:
bash
# Linux/macOS
export APIKEY_2captcha.com=ваш_ключ_здесь
# Windows (CMD)
set APIKEY_2captcha.com=ваш_ключ_здесь
Анализ страницы
Шаг 1. Откройте страницу авторизации
Перейдите по стартовому URL: https://app.oneassembly.com. Вас автоматически перенаправит на login.oneassembly.com с параметром state.
Шаг 2. Откройте инструменты разработчика
Нажмите F12, перейдите на вкладку Network. Обновите страницу и найдите запрос к anchor (загрузка виджета reCAPTCHA).
Шаг 3. Извлеките параметры
В запросе anchor найдите следующие параметры:
| Параметр | Где найти | Пример значения |
|---|---|---|
k (sitekey) |
Query string запроса anchor | 6LeSRLUpAAAAAFjsCw4WqcgzM6imNrz2rSS4l_I1 |
co (origin) |
Query string | https://app.oneassembly.com:443 |
apiDomain |
Query string (опционально) | www.recaptcha.net |
Важно: параметр data-s для данного случая не требуется.
Реализация
Ниже представлен полный рабочий пример на Python с использованием асинхронного клиента twocaptcha.
python
import asyncio
import os
import sys
# Добавляем путь к библиотеке, если она установлена локально
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
from twocaptcha import AsyncTwoCaptcha
# API-ключ берём из переменной окружения или указываем напрямую (не рекомендуется для продакшена)
api_key = os.getenv('APIKEY_2captcha.com', 'YOUR_API_KEY')
# Конфигурация решателя
config = {
'server': '2captcha.com', # или 'rucaptcha.com' для альтернативного сервера
'apiKey': api_key,
'softId': 123, # ID вашего софта (опционально, для статистики)
'defaultTimeout': 120, # Таймаут на обычный запрос, секунды
'recaptchaTimeout': 600, # Таймаут специально для reCAPTCHA, секунды
'pollingInterval': 10, # Интервал опроса результата, секунды
}
# Инициализируем асинхронный клиент
solver = AsyncTwoCaptcha(**config)
async def solve_recaptcha_enterprise():
"""
Решает reCAPTCHA Enterprise V2 для Auth0-страницы oneassembly.com
"""
try:
result = await solver.recaptcha(
sitekey='6LeSRLUpAAAAAFjsCw4WqcgzM6imNrz2rSS4l_I1',
# Критически важно: передаём полный URL со state-параметром
url='https://login.oneassembly.com/u/login?state=hKFo2SAyc2M1dldxTjhMS19TYV9kb2MxM0hCdjJ6MWdWbXZ5dqFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHdFREliaWgyRXNzSkFsUjVvcHFyVllnYU5sVHp4bHhUo2NpZNkgSnNOTlAwM3pxTDZVQUJjZHlncXFhczZySlpTdmduNzY',
enterprise=1, # Обязательно для Enterprise-версии
invisible=0, # 0 = чекбокс, 1 = невидимая капча
action='', # Опционально, если виджет не требует action
# apiDomain='www.recaptcha.net', # Можно указать, но не обязательно
# Прокси не требуются для тестов, но рекомендуются для продакшена:
# proxy={'type': 'HTTPS', 'uri': 'login:pass@ip:port'}
)
return result
except Exception as e:
print(f'Error during captcha solving: {e}')
sys.exit(1)
if __name__ == '__main__':
# Запускаем асинхронную функцию
result = asyncio.run(solve_recaptcha_enterprise())
# Выводим результат: код ответа и токен (или код ошибки)
print('Result:', result)
Пояснения к коду
Полученный токен используйте стандартным способом для recaptcha
Параметры запроса recaptcha
python
result = await solver.recaptcha(
sitekey='...',
url='https://login.oneassembly.com/u/login?state=...',
enterprise=1,
invisible=0,
...
)
sitekey: публичный ключ виджета, извлекается из запросаanchor.url: полный динамический URL со state. Это ключевое условие успеха.enterprise=1: обязательный флаг для Enterprise-версии. Без него задача будет обработана как обычная reCAPTCHA v2, что приведёт к ошибке.invisible=0: указывает, что используется виджет с чекбоксом, а не невидимая капча.
Обработка ошибок
Блок try/except перехватывает исключения сети, таймауты и ошибки валидации параметров. В продакшене рекомендуется добавить повторные попытки (retry logic) и логирование.
Типичные ошибки
| Ошибка | Вероятная причина | Решение |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
Передан базовый URL вместо динамического со state | Используйте полный URL из адресной строки после редиректа Auth0 |
ERROR_WRONG_USER_KEY |
Неверный API-ключ | Проверьте ключ в настройках аккаунта на 2captcha.com |
ERROR_ZERO_BALANCE |
Недостаточно средств на балансе | Пополните баланс или проверьте, не исчерпан ли лимит |
ERROR_IP_NOT_ALLOWED |
Запрос с неавторизованного IP | Добавьте IP в белый список в настройках API-ключа |
| Токен не принимается сайтом | Несовпадение User-Agent или отсутствие прокси | Используйте тот же User-Agent, что и в браузере; добавьте резидентный прокси нужной локации |
| Долгое решение (>5 мин) | Капча требует обновления параметров | Убедитесь, что pageurl актуален; при необходимости обновляйте state перед каждым запросом |
Дополнительные ресурсы
-
Песочница: активировать песочницу
Интерфейс для тестирования запросов к API без написания кода -
Документация Python SDK: reCAPTCHA Enterprise V2 репозитории 2captcha-python
Описание методов библиотекиtwocaptchaи примеры использования -
API документация: reCAPTCHA V2 Enterprise
Полная спецификация эндпоинтов и параметров метода GeeTest -
Поддержка: создать тикет
Обратитесь в службу поддержки при возникновении технических вопросов
Контрольный список перед запуском
- Получен и проверен API-ключ
- Установлена библиотека
twocaptcha(pip install twocaptcha) - Извлечён
sitekey - В параметр
urlпередан полный динамический URL, а не базовый домен - Указан параметр
enterprise=1 - Параметр
invisibleсоответствует - Для продакшена настроены резидентные прокси с той же локацией, что и целевой сайт
- User-Agent в запросах совпадает с браузерным
- Обработаны исключения и реализован логгинг ошибок
- Протестировано в песочнице перед запуском в продакшен
Заключение
Решение reCAPTCHA Enterprise V2 на Auth0-страницах требует внимания к деталям: динамические сессионные параметры, корректные флаги API и согласованность окружения. Следуя этой инструкции, вы сможете стабильно получать рабочие токены и интегрировать решение капч в свои проекты.