Как автоматически решать Яндекс Капчу на Python с Captcha Solver
Содержание
Автотест заполняет форму, нажимает кнопку — и останавливается на Yandex SmartCaptcha. Причина проста: сайту нужен не клик по виджету, а одноразовый токен, связанный с конкретной страницей и sitekey.
Ниже — короткий рабочий путь: Selenium читает параметры виджета, Captcha Solver возвращает токен, готовый пример передаёт его форме и проверяет ответ сайта. Этот сценарий легко адаптировать под тестовый стенд.
Что происходит при решении#
Последовательность состоит из шести шагов:
- Selenium открывает страницу с Yandex SmartCaptcha.
- Скрипт читает URL, публичный
sitekeyи User-Agent браузера. YandexSmartCaptchaTaskProxylessпередаётся в Captcha Solver.client.solve()ожидает готовыйsolution.token.- Токен записывается в
smart-tokenили передаётся callback, предусмотренному интеграцией. - Форма отправляется, а скрипт ждёт реальный признак успеха от сайта.
Обычно пользователь сначала видит компактный чекбокс «Я не робот». Если запрос кажется SmartCaptcha подозрительным или настроен максимальный уровень сложности, сервис показывает дополнительное задание — например, распознавание текста.

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

Пример дополнительного задания с вводом текста. Источник: 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 виджета и 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#
- Откройте личный кабинет и получите API-ключ.
- Клонируйте репозиторий, выполните команды установки и проверьте появление
SUCCESSна demo. - Затем замените URL, селекторы и критерий успеха параметрами разрешённой целевой страницы.
Полезные ссылки: