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

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

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

Как обойти reCAPTCHA v2 Invisible

Грегори Фишер
Грегори Фишер

Технический специалист

Введение

reCAPTCHA v2 Invisible — это невидимая версия капчи от Google, которая работает в фоновом режиме и не требует явного взаимодействия пользователя с виджетом. В отличие от классической reCAPTCHA v2 с галочкой «Я не робот», невидимая версия активируется автоматически при выполнении определённых действий на странице: клике по кнопке, отправке формы или загрузке контента.

Для разработчиков, занимающихся автоматизацией, тестированием или парсингом данных, reCAPTCHA v2 Invisible представляет особую сложность: капча не отображается визуально, но блокирует выполнение целевого действия до прохождения проверки.

Эта статья — практическое руководство по обходу reCAPTCHA v2 Invisible с использованием API RuCaptcha. Вы узнаете, как определить параметры капчи, отправить задачу на решение, получить токен и корректно внедрить его на странице.

Что такое reCAPTCHA v2 Invisible

reCAPTCHA v2 Invisible — это механизм проверки, который:

  • Не отображает видимый виджет на странице
  • Активируется при выполнении пользовательских действий (клик, отправка формы)
  • Использует callback-функцию для обработки результата проверки
  • Требует передачи токена через функцию обратного вызова, а не через поле формы

Ключевые отличия от обычной reCAPTCHA v2:

Характеристика reCAPTCHA v2 (Checkbox) reCAPTCHA v2 Invisible
Виджет на странице Да (галочка «Я не робот») Нет (скрытая проверка)
Активация Пользователь кликает по галочке Автоматически при действии
Поле для токена g-recaptcha-response Callback-функция
Параметр isInvisible false или не указан true

Необходимые параметры для API

Для решения reCAPTCHA v2 Invisible через API RuCaptcha требуются следующие параметры:

Обязательные параметры

Параметр Описание Пример
type Тип задачи: RecaptchaV2TaskProxyless или RecaptchaV2Task "RecaptchaV2TaskProxyless"
websiteURL Полный URL страницы с капчей "https://target-site.com/login"
websiteKey Sitekey капчи (атрибут data-sitekey) "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u"
isInvisible Флаг невидимой версии true

Дополнительные параметры (рекомендуемые)

Параметр Описание Пример
userAgent User-Agent браузера для согласованности сессии "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
cookies Cookie для авторизованных сессий "session_id=abc123; user=john"
recaptchaDataSValue Значение параметра data-s (для сервисов Google) "some_value"
apiDomain Домен загрузки reCAPTCHA: google.com или recaptcha.net "recaptcha.net"

Параметры прокси (для типа RecaptchaV2Task)

Параметр Описание Пример
proxyType Тип прокси: http, socks4, socks5 "http"
proxyAddress IP или хост прокси-сервера "1.2.3.4"
proxyPort Порт прокси-сервера 8080
proxyLogin Логин для авторизации на прокси "proxy_user"
proxyPassword Пароль для авторизации на прокси "proxy_pass"

Как найти параметры reCAPTCHA v2 Invisible

Шаг 1: Определение sitekey

  1. Откройте целевую страницу в браузере
  2. Запустите DevTools (F12) → вкладка Elements или Network
  3. Найдите элемент капчи — обычно это <div> с классом g-recaptcha и атрибутом data-sitekey
html Copy
<div class="g-recaptcha" 
     data-sitekey="6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u"
     data-callback="onSubmit"
     data-size="invisible">
</div>
  1. Скопируйте значение data-sitekey — это и есть websiteKey

Шаг 2: Поиск callback-функции

Для невидимой версии критически важно найти имя callback-функции:

  1. В том же элементе найдите атрибут data-callback
  2. Значение этого атрибута — имя функции, которую нужно вызвать с токеном

Пример: data-callback="onSubmit" → функция onSubmit(token)

Шаг 3: Альтернативный способ — скрипт для консоли

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

javascript Copy
function findRecaptchaClients() {
    if (typeof ___grecaptcha_cfg === 'undefined') return [];
    
    return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
        const data = {
            id: cid,
            version: client['C'] ? 'V3' : 'V2',
            sitekey: client['C']?.['k'] || client['k'],
            callback: client['C']?.['C']?.['callback']?.toString() || null,
            action: client['C']?.['C']?.['action'] || null
        };
        return data;
    }).filter(item => item.sitekey);
}

console.log(JSON.stringify(findRecaptchaClients(), null, 2));

Выполните этот скрипт в консоли браузера — он вернёт массив объектов с параметрами всех капч на странице.

Типы задач API

RecaptchaV2TaskProxyless (рекомендуется)

Использует внутренний пул прокси-серверов RuCaptcha. Подходит для большинства случаев.

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://target-site.com/login",
        "websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
        "isInvisible": true
    }
}

RecaptchaV2Task (с вашим прокси)

Используйте, когда требуется фиксированный IP-адрес (например, для сервисов Google).

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "RecaptchaV2Task",
        "websiteURL": "https://target-site.com/login",
        "websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
        "isInvisible": true,
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
        "cookies": "session=abc123",
        "proxyType": "http",
        "proxyAddress": "1.2.3.4",
        "proxyPort": 8080,
        "proxyLogin": "user",
        "proxyPassword": "pass"
    }
}

Алгоритм обхода reCAPTCHA v2 Invisible

  1. Подготовка: получите API-ключ в личном кабинете RuCaptcha
  2. Сбор параметров: определите websiteKey, websiteURL, callback
  3. Отправка задачи: создайте задачу через эндпоинт createTask
  4. Ожидание решения: опрашивайте getTaskResult с интервалом 5 секунд
  5. Получение токена: извлеките gRecaptchaResponse из ответа
  6. Внедрение токена: вызовите callback-функцию с полученным токеном

Пример кода: Python + SeleniumBase

python Copy
import time
import requests
from seleniumbase import Driver

API_KEY = "YOUR_API_KEY"
SITE_KEY = "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u"
PAGE_URL = "https://target-site.com/login"
CALLBACK_NAME = "onSubmit"  # имя callback-функции из data-callback

def solve_recaptcha_invisible(sitekey, url, callback_name=None):
    """Отправляет задачу на решение reCAPTCHA v2 Invisible"""
    
    payload = {
        "clientKey": API_KEY,
        "task": {
            "type": "RecaptchaV2TaskProxyless",
            "websiteURL": url,
            "websiteKey": sitekey,
            "isInvisible": True
        }
    }
    
    # Отправка задачи
    response = requests.post(
        "https://api.rucaptcha.com/createTask",
        json=payload
    )
    task_id = response.json()["taskId"]
    
    # Ожидание решения
    while True:
        time.sleep(5)
        result = requests.post(
            "https://api.rucaptcha.com/getTaskResult",
            json={"clientKey": API_KEY, "taskId": task_id}
        ).json()
        
        if result["status"] == "ready":
            return result["solution"]["gRecaptchaResponse"]
        elif result["errorId"] != 0:
            raise Exception(f"API Error: {result.get('errorDescription')}")

# Инициализация браузера в режиме UC (Undetected Chromedriver)
driver = Driver(uc=True, headless=False)

try:
    # Переход на целевую страницу
    driver.get(PAGE_URL)
    time.sleep(3)
    
    # Решение капчи
    token = solve_recaptcha_invisible(SITE_KEY, PAGE_URL)
    print(f"Токен получен: {token[:50]}...")
    
    # Внедрение токена через callback-функцию
    if CALLBACK_NAME:
        driver.execute_script(f"{CALLBACK_NAME}('{token}');")
    else:
        # Fallback: вставка в скрытое поле и отправка формы
        driver.execute_script(
            f"document.getElementById('g-recaptcha-response').value = '{token}';"
        )
        driver.execute_script("document.querySelector('form').submit();")
    
    # Проверка результата
    time.sleep(5)
    if "успех" in driver.page_source.lower() or "success" in driver.page_source.lower():
        print("Капча успешно пройдена!")
    else:
        print("Возможна ошибка валидации токена")
        
finally:
    driver.quit()

Работа с callback-функциями

Почему callback важен для Invisible-версии

В невидимой reCAPTCHA v2 сайт не проверяет поле g-recaptcha-response напрямую. Вместо этого он ожидает вызова определённой JavaScript-функции с токеном. Если вы просто вставите токен в скрытое поле, сайт может не отреагировать.

Как найти и вызвать callback

  1. Через DevTools:

    • Откройте вкладку Elements
    • Найдите <div class="g-recaptcha">
    • Скопируйте значение атрибута data-callback
  2. Через консоль:

    javascript Copy
    // Вывести все callback-функции reCAPTCHA на странице
    Object.values(___grecaptcha_cfg.clients).forEach(client => {
        const cb = client['C']?.['C']?.['callback'];
        if (cb) console.log('Callback:', cb.toString());
    });
  3. Вызов callback:

    javascript Copy
    // Если callback называется "onSubmit"
    onSubmit('03AGdBq24PxK...');

Если callback недоступен глобально

Иногда функция обратного вызова определена внутри замыкания или iframe. В этом случае:

python Copy
# Попытка найти callback через перебор глобальных функций
driver.execute_script("""
    for (let prop in window) {
        if (typeof window[prop] === 'function' && 
            (prop.toLowerCase().includes('recaptcha') || 
             prop.toLowerCase().includes('submit'))) {
            console.log('Возможный callback:', prop);
        }
    }
""")

Обработка ошибок

Типичные ошибки API

Код ошибки Описание Решение
ERROR_WRONG_USER_KEY Неверный API-ключ Проверьте ключ в личном кабинете
ERROR_KEY_DOES_NOT_EXIST Ключ не найден Убедитесь, что ключ активен
ERROR_ZERO_BALANCE Недостаточно средств Пополните баланс аккаунта
ERROR_NO_SLOT_AVAILABLE Нет свободных воркеров Повторите запрос через 10-20 секунд
ERROR_CAPTCHA_UNSOLVABLE Капча не может быть решена Проверьте параметры, попробуйте с прокси
ERROR_WRONG_CAPTCHA_ID Неверный taskId Используйте актуальный taskId из createTask

Ошибки на стороне сайта

Симптом Возможная причина Решение
Токен отклоняется Протухший токен (срок жизни ~2 минуты) Внедряйте токен сразу после получения
Сайт не реагирует на токен Не вызван callback Найдите и вызовите функцию data-callback
Блокировка по IP Подозрительная активность с одного адреса Используйте резидентские прокси
Капча не загружается Динамическая подгрузка виджета Добавьте задержку перед сбором параметров

Лучшие практики

  1. Используйте UC Mode в Selenium: режим Undetected Chromedriver скрывает признаки автоматизации от детекторов Google.

  2. Синхронизируйте User-Agent: передавайте тот же User-Agent в запросе к API, который использует ваш браузер.

  3. Работайте с сессиями: передавайте cookie в задаче API, если сайт требует авторизации.

  4. Не кэшируйте параметры: sitekey и callback могут меняться — извлекайте их при каждом запуске.

  5. Обрабатывайте таймауты: установите лимит ожидания решения (обычно 60-120 секунд).

  6. Используйте резидентские прокси: для повышения успеха решения в сервисах Google.

  7. Тестируйте на тестовых ключах: отлаживайте логику внедрения токена без расхода баланса.

Примеры кода для других языков

Официальные библиотеки RuCaptcha доступны для:

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

Заключение

Обход reCAPTCHA v2 Invisible сводится к трём ключевым шагам: корректное определение параметров капчи (особенно callback-функции), отправка задачи в API с флагом isInvisible: true, и правильное внедрение полученного токена через вызов функции обратного вызова.

Запомните:

  • Для Invisible-версии всегда указывайте "isInvisible": true в запросе к API
  • Найдите и вызовите функцию из атрибута data-callback — без этого сайт не примет токен
  • Используйте тестовые ключи Google для отладки без расхода баланса
  • Синхронизируйте User-Agent и cookie между браузером и запросом к API

При соблюдении этих правил вы сможете надёжно интегрировать обход reCAPTCHA v2 Invisible в свои проекты автоматизации.