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

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

Как решить 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_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 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_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 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-ключ Проверьте ключ в настройках аккаунта на 2captcha.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 и согласованность окружения. Следуя этой инструкции, вы сможете стабильно получать рабочие токены и интегрировать решение капч в свои проекты.