Эта статья была полезной?
Как обойти 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
- Откройте целевую страницу в браузере
- Запустите DevTools (F12) → вкладка Elements или Network
- Найдите элемент капчи — обычно это
<div>с классомg-recaptchaи атрибутомdata-sitekey
html
<div class="g-recaptcha"
data-sitekey="6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u"
data-callback="onSubmit"
data-size="invisible">
</div>
- Скопируйте значение data-sitekey — это и есть websiteKey
Шаг 2: Поиск callback-функции
Для невидимой версии критически важно найти имя callback-функции:
- В том же элементе найдите атрибут data-callback
- Значение этого атрибута — имя функции, которую нужно вызвать с токеном
Пример: data-callback="onSubmit" → функция onSubmit(token)
Шаг 3: Альтернативный способ — скрипт для консоли
Если параметры скрыты или динамически подгружаются, используйте скрипт для извлечения данных reCAPTCHA:
javascript
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
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://target-site.com/login",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
"isInvisible": true
}
}
RecaptchaV2Task (с вашим прокси)
Используйте, когда требуется фиксированный IP-адрес (например, для сервисов Google).
json
{
"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
- Подготовка: получите API-ключ в личном кабинете 2Captcha
- Сбор параметров: определите websiteKey, websiteURL, callback
- Отправка задачи: создайте задачу через эндпоинт createTask
- Ожидание решения: опрашивайте getTaskResult с интервалом 5 секунд
- Получение токена: извлеките gRecaptchaResponse из ответа
- Внедрение токена: вызовите callback-функцию с полученным токеном
Пример кода: Python + SeleniumBase
python
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
-
Через DevTools:
- Откройте вкладку Elements
- Найдите
<div class="g-recaptcha"> - Скопируйте значение атрибута data-callback
-
Через консоль:
javascript// Вывести все callback-функции reCAPTCHA на странице Object.values(___grecaptcha_cfg.clients).forEach(client => { const cb = client['C']?.['C']?.['callback']; if (cb) console.log('Callback:', cb.toString()); }); -
Вызов callback:
javascript// Если callback называется "onSubmit" onSubmit('03AGdBq24PxK...');
Если callback недоступен глобально
Иногда функция обратного вызова определена внутри замыкания или iframe. В этом случае:
python
# Попытка найти 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 | Подозрительная активность с одного адреса | Используйте резидентские прокси |
| Капча не загружается | Динамическая подгрузка виджета | Добавьте задержку перед сбором параметров |
Лучшие практики
-
Используйте UC Mode в Selenium: режим Undetected Chromedriver скрывает признаки автоматизации от детекторов Google.
-
Синхронизируйте User-Agent: передавайте тот же User-Agent в запросе к API, который использует ваш браузер.
-
Работайте с сессиями: передавайте cookie в задаче API, если сайт требует авторизации.
-
Не кэшируйте параметры: sitekey и callback могут меняться — извлекайте их при каждом запуске.
-
Обрабатывайте таймауты: установите лимит ожидания решения (обычно 60-120 секунд).
-
Используйте резидентские прокси: для повышения успеха решения в сервисах Google.
-
Тестируйте на тестовых ключах: отлаживайте логику внедрения токена без расхода баланса.
Примеры кода для других языков
Официальные библиотеки 2Captcha доступны для:
Полезные ссылки
- Документация API reCAPTCHA v2: https://rucaptcha.com/api-docs/recaptcha-v2
- Демо-страница для тестирования: https://rucaptcha.com/demo/recaptcha-v2
- Скрипт findRecaptchaClients: https://rucaptcha.com/h/recaptcha-v2-callback
- Примеры кода на GitHub: https://github.com/2captcha
- Служба поддержки: https://rucaptcha.com/support/tickets/new
Заключение
Обход reCAPTCHA v2 Invisible сводится к трём ключевым шагам: корректное определение параметров капчи (особенно callback-функции), отправка задачи в API с флагом isInvisible: true, и правильное внедрение полученного токена через вызов функции обратного вызова.
Запомните:
- Для Invisible-версии всегда указывайте "isInvisible": true в запросе к API
- Найдите и вызовите функцию из атрибута data-callback — без этого сайт не примет токен
- Используйте тестовые ключи Google для отладки без расхода баланса
- Синхронизируйте User-Agent и cookie между браузером и запросом к API
При соблюдении этих правил вы сможете надёжно интегрировать обход reCAPTCHA v2 Invisible в свои проекты автоматизации.