Looking for international version of our service? Go to 2captcha.com

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

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

Как решить 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, например:

Copy
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 Copy
pip install twocaptcha

Получение API-ключа

  1. Зарегистрируйтесь на нашем сайте
  2. Перейдите в раздел настроек аккаунта
  3. Скопируйте ваш API-ключ
  4. Для безопасности рекомендуется хранить ключ в переменной окружения:
bash Copy
# Linux/macOS
export APIKEY_rucaptcha.com=ваш_ключ_здесь

# Windows (CMD)
set APIKEY_rucaptcha.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 Copy
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_rucaptcha.com', 'YOUR_API_KEY')

# Конфигурация решателя
config = {
    'server': 'rucaptcha.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 Copy
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-ключ Проверьте ключ в настройках аккаунта на rucaptcha.com
ERROR_ZERO_BALANCE Недостаточно средств на балансе Пополните баланс или проверьте, не исчерпан ли лимит
ERROR_IP_NOT_ALLOWED Запрос с неавторизованного IP Добавьте IP в белый список в настройках API-ключа
Токен не принимается сайтом Несовпадение User-Agent или отсутствие прокси Используйте тот же User-Agent, что и в браузере; добавьте резидентный прокси нужной локации
Долгое решение (>5 мин) Капча требует обновления параметров Убедитесь, что pageurl актуален; при необходимости обновляйте state перед каждым запросом

Дополнительные ресурсы

Контрольный список перед запуском

  • Получен и проверен API-ключ
  • Установлена библиотека twocaptcha (pip install twocaptcha)
  • Извлечён sitekey
  • В параметр url передан полный динамический URL, а не базовый домен
  • Указан параметр enterprise=1
  • Параметр invisible соответствует
  • Для продакшена настроены резидентные прокси с той же локацией, что и целевой сайт
  • User-Agent в запросах совпадает с браузерным
  • Обработаны исключения и реализован логгинг ошибок
  • Протестировано в песочнице перед запуском в продакшен

Заключение

Решение reCAPTCHA Enterprise V2 на Auth0-страницах требует внимания к деталям: динамические сессионные параметры, корректные флаги API и согласованность окружения. Следуя этой инструкции, вы сможете стабильно получать рабочие токены и интегрировать решение капч в свои проекты.