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

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

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

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

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

Введение

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

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

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

Что такое 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 2Captcha требуются следующие параметры:

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

Параметр Описание Пример
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 (рекомендуется)

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

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-ключ в личном кабинете 2Captcha
  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.2captcha.com/createTask",
        json=payload
    )
    task_id = response.json()["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"]
        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. Тестируйте на тестовых ключах: отлаживайте логику внедрения токена без расхода баланса.

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

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

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

Заключение

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

Запомните:

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

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