Как обойти reCAPTCHA v2
Google reCAPTCHA v2, будь то классическая галочка «Я не робот» или её невидимая версия (Invisible), остается главным «вратарем» интернета. Если вы пишете парсер или автотесты, попытка научить нейросеть искать гидранты — это путь в никуда: долго, дорого и ломается при каждом обновлении интерфейса Google.
Единственный масштабируемый способ — делегировать решение через API специальных сервисов. В этом гайде разберем, как это сделать правильно, используя современные инструменты, а не устаревший «голый» Selenium, который детектируется на раз-два.
Почему обычный Selenium больше не работает?
Google научился вычислять стандартный Selenium WebDriver за миллисекунды. Основная причина — специфические свойства браузера, такие как переменная navigator.webdriver = true, которая моментально выдает автоматизацию.
Чтобы не ловить бан еще до появления капчи, мы будем использовать SeleniumBase. Это мощная библиотека-обертка, в которой есть режим UC Mode (Undetected Chromedriver). Он автоматически подчищает следы автоматизации, делая ваш скрипт неотличимым от обычного пользователя Chrome,.
Стек технологий:
- Python 3.10+
- SeleniumBase (для управления браузером в режиме невидимки).
- ruCaptcha API (для получения валидного токена).
Алгоритм обхода
Неважно, на каком языке вы пишете (Python, Java, C#), логика обхода v2 всегда одинакова:
- Найти на странице
data-sitekey(публичный ключ капчи). - Отправить этот ключ и URL страницы в API решателя.
- Получить токен ответа (
g-recaptcha-response). - Внедрить токен в скрытое поле на странице.
- Важно: Вызвать callback-функцию (если капча невидимая) или нажать кнопку отправки.
Практика
Установим необходимые библиотеки:
bash
pip install seleniumbase 2captcha-python
1. Получение токена через API
Сначала напишем функцию, которая отправляет задачу воркерам и ждет ответ. Мы используем официальный SDK 2captcha-python, чтобы не писать polling-запросы вручную.
python
from twocaptcha import TwoCaptcha
def get_token(sitekey, url):
# Вставьте ваш API ключ от 2Captcha
solver = TwoCaptcha('ВАШ_API_KEY')
try:
print("Отправляем капчу на решение...")
result = solver.recaptcha(
sitekey=sitekey,
url=url,
# invisible=1, # Раскомментируйте, если решаете невидимую версию
)
print("Токен получен!")
return result['code']
except Exception as e:
print(f"Ошибка при решении: {e}")
return None
2. Работа с браузером (SeleniumBase)
Теперь самое интересное. Мы заходим на сайт, решаем капчу и внедряем результат. В примере используем UC Mode для обхода детекторов.
python
from seleniumbase import SB
import time
# Официальный тестовый ключ Google (всегда работает)
SITE_KEY = "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
URL = "https://google.com/recaptcha/api2/demo"
# Запускаем браузер с флагом uc=True (режим невидимки)
with SB(uc=True) as sb:
sb.open(URL)
# 1. Получаем токен от API (это может занять 15-40 секунд)
token = get_token(SITE_KEY, URL)
if not token:
sb.driver.quit()
# 2. Делаем скрытое поле видимым
# Это необязательно технически, но полезно для отладки, чтобы видеть вставку
sb.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# 3. Вставляем полученный токен в поле g-recaptcha-response
sb.execute_script(f"document.getElementById('g-recaptcha-response').value = '{token}';")
# 4. Отправляем форму
sb.click("#recaptcha-demo-submit")
# Проверяем результат
if sb.is_text_visible("Verification Success..."):
print("Успех! Капча пройдена.")
else:
print("Что-то пошло не так.")
Сложный случай: Invisible reCAPTCHA и Callbacks
С невидимой капчей (Invisible v2) всё хитрее. Там часто нет кнопки Submit. Сайт проверяет капчу в фоне и, если всё ок, запускает JavaScript-функцию (callback).
Если вы просто вставите токен в HTML и нажмете кнопку входа, сайт может не отреагировать, так как он ждет события от самой капчи.
Как найти Callback?
- Откройте DevTools (F12) на целевом сайте.
- Найдите элемент капчи (обычно
divс классомg-recaptcha). - Ищите атрибут
data-callback.- Пример:
data-callback="onLoginSuccess".
- Пример:
Как это обойти?
Вместо клика по кнопке, нужно вызвать эту функцию вручную через JS, передав ей токен.
python
# Вместо sb.click() выполняем:
sb.execute_script(f"onLoginSuccess('{token}')")
Лайфхак: Как тестировать бесплатно
Не тратьте баланс решателя во время отладки логики скрипта. Google предоставляет официальные тестовые ключи. Капча с ними всегда показывается, но всегда принимает любой токен и никогда не банит,.
- Site Key:
6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI - Secret Key:
6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
Просто замените реальный ключ сайта в своем коде на этот. Если скрипт проходит валидацию и нажимает кнопки — значит, ваша логика внедрения токена верна. Перед запуском в продакшен не забудьте вернуть реальный ключ!
Чек-лист: Если всё равно не работает
-
User-Agent:
Если воркер решал задачу с Chrome/Windows, а ваш скрипт стучится с заголовками Headless Linux, сайт может отклонить токен.
Решение: Передавайте свой User-Agent в API ruCaptcha при создании задачи, чтобы воркер использовал такой же,. -
Прокси (IP Reputation):
Использование IP-адресов дата-центров (AWS, Hetzner) часто приводит к тому, что Google отклоняет даже валидный токен.
Решение: Используйте резидентские прокси. В SeleniumBase они подключаются одной строкой:proxy="user:pass@host:port". -
Время жизни токена:
Токен живет всего 120 секунд. Если ваш скрипт долго "тупил" после получения ответа от API, токен протухнет. Внедряйте его сразу после получения.
Вот переписанный текст на русском языке:
SDK
У ruCaptcha есть SDK практически для языков прогарммирования. В документации API библиотеки для Java, C#, Go, PHP и даже Node.js. Логика при этом остаётся точно такой же: отправить SiteKey → получить токен → вставить токен.
Итог
Обход reCAPTCHA v2 — это не магия, а четкая последовательность действий. Используйте SeleniumBase для маскировки браузера, следите за Callbacks в невидимых версиях и используйте Test Keys для отладки.