Как автоматически решать Яндекс Капчу на Python с Captcha Solver

Обложка статьи «Как автоматически решать Яндекс Капчу на Python с Captcha Solver»
Содержание

Автотест заполняет форму, нажимает кнопку — и останавливается на Yandex SmartCaptcha. Причина проста: сайту нужен не клик по виджету, а одноразовый токен, связанный с конкретной страницей и sitekey.

Ниже — короткий рабочий путь: Selenium читает параметры виджета, Captcha Solver возвращает токен, готовый пример передаёт его форме и проверяет ответ сайта. Этот сценарий легко адаптировать под тестовый стенд.

Что происходит при решении#

Последовательность состоит из шести шагов:

  1. Selenium открывает страницу с Yandex SmartCaptcha.
  2. Скрипт читает URL, публичный sitekey и User-Agent браузера.
  3. YandexSmartCaptchaTaskProxyless передаётся в Captcha Solver.
  4. client.solve() ожидает готовый solution.token.
  5. Токен записывается в smart-token или передаётся callback, предусмотренному интеграцией.
  6. Форма отправляется, а скрипт ждёт реальный признак успеха от сайта.

Обычно пользователь сначала видит компактный чекбокс «Я не робот». Если запрос кажется SmartCaptcha подозрительным или настроен максимальный уровень сложности, сервис показывает дополнительное задание — например, распознавание текста.

Чекбокс «Я не робот» в Yandex SmartCaptcha

Основной интерфейс SmartCaptcha с чекбоксом. Источник: Yandex Cloud.

Дополнительное задание Yandex SmartCaptcha с распознаванием текста

Пример дополнительного задания с вводом текста. Источник: Yandex Cloud.

В этой статье капча решается целиком через токен, и дополнительное задание проходить не нужно. Если же в вашем сценарии нужно решить само графическое задание по картинкам, для этого есть два отдельных типа задач. SmartCaptchaTask решает выбор объектов по картинке-инструкции и возвращает координаты кликов, PazlCaptchaTask собирает пазл «Калейдоскоп» и возвращает число нажатий на стрелку слайдера. Обоим типам не нужны sitekey и прокси, передаются только картинки. Параметры и примеры ответов есть в документации: Yandex SmartCaptcha Image и Yandex SmartCaptcha Kaleidoscope.

Подготовка Python и Chrome#

Нужны Python 3.9 или новее, Git, Google Chrome, аккаунт Captcha Solver и положительный баланс. Готовый пример уже находится в репозитории; сохранять скрипт из статьи вручную не нужно.

macOS и Linux:

git clone https://github.com/captcha-solver-api/captcha-solver-selenium-python-examples.git
cd captcha-solver-selenium-python-examples
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
export CAPTCHA_API_KEY="your_api_key"
export TARGET_URL="https://captcha-api.yandex.ru/demo"
.venv/bin/python examples/yandex_smartcaptcha.py

Windows PowerShell:

git clone https://github.com/captcha-solver-api/captcha-solver-selenium-python-examples.git
cd captcha-solver-selenium-python-examples
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
$env:CAPTCHA_API_KEY="your_api_key"
$env:TARGET_URL="https://captcha-api.yandex.ru/demo"
.\.venv\Scripts\python.exe examples\yandex_smartcaptcha.py

Если репозиторий уже скачан, пропустите git clone и откройте папку captcha-solver-selenium-python-examples. TARGET_URL задан явно, поэтому значение из .env не сможет незаметно переключить пример на другую страницу. При повторном запуске достаточно открыть папку репозитория, задать обе переменные окружения и выполнить последнюю команду для своей ОС.

Параметры задачи: что передавать и где найти#

Параметр Обязательный Откуда берётся
websiteURL Да URL открытой страницы
websiteKey Да data-sitekey или конфигурация виджета
userAgent Нет navigator.userAgent браузера

URL и User-Agent Selenium получает из уже открытого браузера. sitekey обычно находится в атрибуте data-sitekey контейнера виджета.

Ниже показаны ключевые фрагменты полного примера; импорты, создание браузера и общие функции находятся в репозитории.

# Открываем страницу и читаем параметры текущей браузерной сессии.
driver.get(URL)
widget = wait_for_css(driver, SITEKEY_SELECTOR)
sitekey = widget.get_attribute("data-sitekey")
page_url = driver.current_url
user_agent = driver.execute_script("return navigator.userAgent")

DevTools Console с публичным data-sitekey Yandex SmartCaptcha и URL официальной демостраницы

DevTools Console показывает публичный data-sitekey виджета и URL официальной демостраницы Yandex SmartCaptcha.

Если элемента .smart-captcha[data-sitekey] нет, проверьте конфигурацию window.smartCaptcha.render(...) и iframe виджета. Все параметры должны относиться к той же странице и браузерной сессии, где будет использован токен.

Готовый пример на GitHub#

Полная версия кода на GitHub использует SeleniumBase и общие функции репозитория: открывает официальный demo, читает data-sitekey и User-Agent, получает токен через YandexSmartCaptchaTaskProxyless, заполняет smart-token и сообщает об успехе только после появления Hello, user!.

# SDK создаёт задачу и ожидает готовое решение.
token = client.solve(
    YandexSmartCaptchaTaskProxyless(
        websiteURL=page_url,
        websiteKey=sitekey,
        userAgent=user_agent,
    ),
    timeout=180,
)["token"]

Запустите пример сначала с явно заданным официальным TARGET_URL. Реальная платная задача создаётся при обращении к сервису, поэтому не запускайте скрипт циклически при ошибке.

Передача токена: поле или callback#

В обычной HTML-форме Yandex SmartCaptcha помещает результат в скрытое поле smart-token. Готовый пример использует общую функцию репозитория, чтобы заполнить это поле и уведомить страницу об изменении.

# Передаём токен форме и отправляем её.
wait_for_css(driver, 'input[name="smart-token"]')
fill_response_field(driver, "smart-token", token)
wait_for_xpath(driver, SUBMIT_LOCATOR).click()

# Проверяем принятие токена по ответу официальной demo.
WebDriverWait(driver, 30).until(
    EC.text_to_be_present_in_element((By.TAG_NAME, "body"), "Hello, user!")
)

Если приложение обрабатывает результат через callback, одного заполнения поля может быть недостаточно. В собственной конфигурации проверьте имя обработчика, которому виджет передаёт токен, и состояние приложения, которое этот обработчик обновляет. Имя callback не универсально: используйте только фактическую интеграцию разрешённой страницы.

Проверка и диагностика#

Полученный токен ещё не доказывает, что сайт его принял. Для demo подтверждением служит Hello, user!; на своём сайте ждите URL успеха, видимый .success-message или результат операции после серверной проверки SmartCaptcha. По документации Yandex токен одноразовый и действует пять минут.

Если форма отклонена, откройте DevTools → Network и проверьте:

  • есть ли smart-token в payload запроса формы;
  • не пустое ли его значение;
  • какой HTTP-статус и тело ответа вернул сервер;
  • совпадают ли URL, sitekey, User-Agent и, при использовании, прокси с текущей сессией.

Если это JavaScript-приложение, а не обычная HTML-форма, проверьте вызов callback и изменение состояния приложения. Простая запись в hidden input может быть недостаточной.

Почему Captcha Solver#

Подключите Yandex SmartCaptcha к своей автоматизации с нашим Python SDK. Вы передаёте параметры виджета, а мы возвращаем токен, который можно использовать в вашей форме.

  • Меньше кода для интеграции. Наш SDK создаёт задачу и ждёт результат через один вызов client.solve() — вам не нужно писать собственный цикл проверки статуса.
  • Гибкость для вашего сценария. Мы поддерживаем задачи без собственного прокси и с вашим прокси.
  • Понятная стоимость. Решение Yandex SmartCaptcha стоит $0.003 за успешную задачу — $3 за 1 000 успешных решений. Актуальные условия — на странице тарифов.
  • Всё для первого запуска. Мы подготовили документацию и примеры запросов, чтобы вы могли начать с демостраницы и затем адаптировать интеграцию под свою форму.

Получите API-ключ в нашем личном кабинете и запустите наш пример с GitHub: от параметров виджета до подтверждённой отправки формы.

Используйте автоматизацию только для своих систем или с явным разрешением владельца. Не применяйте её для спама, массовых регистраций и обхода ограничений.

Начните с demo#

  1. Откройте личный кабинет и получите API-ключ.
  2. Клонируйте репозиторий, выполните команды установки и проверьте появление SUCCESS на demo.
  3. Затем замените URL, селекторы и критерий успеха параметрами разрешённой целевой страницы.

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

Была ли статья полезной?