Selenium

Распознавание капчи в Selenium для Python и скриптов WebDriver

reCAPTCHA, проверка Turnstile, слайдер GeeTest v3 или искажённая картинка не должны обрывать сессию WebDriver. Установите в браузер расширение CapSkip или вызывайте SDK из теста, и каждое решение будет выполняться локально, без поштучной оплаты.

Windows x64·Работает локально, поэтому капча не покидает ваш компьютер
  • Python, C# и Node.js
  • Расширение или SDK
  • Совместим с Selenium Grid
капч в месяц40,000
40.0k250.0k
В других сервисах поштучно, примерно $1.40 за 1000$56.00
CapSkip Bronze, фиксированно$35.00
$21.00остаётся у вас в карманекаждый месяц при таком объёме

Рано или поздно прогон WebDriver упирается в форму входа, поиска или регистрации, защищённую капчей, и тут на помощь приходит распознавание капчи для Selenium. Selenium умеет находить элементы, кликать и вводить текст, но не может получить токен reCAPTCHA или прочитать искажённые буквы, поэтому тест зависает, а отчёт заполняется тайм-аутами. CapSkip работает рядом с драйвером, на том же компьютере с Windows или на VPS, доступном скрипту, и возвращает ответ, пока браузер ждёт.

Подключить его можно двумя способами, и они подходят под разные привычки работы с Selenium. Путь без кода запускает профиль Chrome или Firefox, в котором уже установлено расширение CapSkip, поэтому виджеты решаются прямо на странице, будто галочку поставил человек. Путь через скрипт оставляет управление в вашем тесте: pip install capskip, считайте sitekey через find_element, вызовите solver.recaptcha() или solver.turnstile() и запишите токен обратно через execute_script. Капчи-картинки возвращаются в виде текста примерно за 0,1 секунды.

Из токенных капч CapSkip поддерживает reCAPTCHA v2, v3 и Enterprise, а также Cloudflare Turnstile. Слайдеры GeeTest v3, пазлы Capy, CaptchaFox и AWS WAF CAPTCHA тоже входят в набор, как и проверки с доказательством работы в ALTCHA и Friendly Captcha. Капчи-картинки охватывают тысячи вариантов, и hCaptcha тоже поддерживается, включая невидимые виджеты и виджеты Enterprise. FunCaptcha и GeeTest v4 не поддерживаются. Поштучного учёта нет, поэтому ночной регрессионный прогон, наткнувшийся на сотни капч, стоит ровно столько же, сколько прогон без единой капчи.

Код драйвера можно оставить как есть. Установите расширение CapSkip в профиль браузера, запустите Selenium с этим профилем, пока работает приложение, и капчи будут решаться сами, пока идут ваши явные ожидания. Переходите на SDK только тогда, когда тесту нужен сам ответ на руках. Читайте руководство по расширению

Что распознавание капчи для Selenium даёт WebDriver

Профиль с распознаванием для Chrome или Firefox

Один раз установите расширение в отдельный профиль Chrome и передайте его драйверу через user-data-dir или загрузите дополнение для Firefox через install_addon(). После этого каждое окно, которое открывает Selenium, умеет решать капчу, пока работает приложение.

Запрос токенов из того же файла теста

Считайте data-sitekey через find_element, передайте его вместе с driver.current_url в solver.recaptcha() и задайте g-recaptcha-response через execute_script. Пока приложение работает, браузер остаётся под управлением вашего скрипта.

Текст с картинки прямо из живого элемента

Захватите изображение через screenshot_as_base64 и отправьте его в solver.normal(). Поскольку картинка не запрашивается повторно, текст, который вы вводите через send_keys, совпадает с тем, что было показано в этой сессии.

Работает в паре с undetected-chromedriver

Маскирующиеся драйверы, такие как undetected-chromedriver и режим UC в SeleniumBase, делают капчи более редкими. CapSkip решает те, что всё равно проскакивают, так что два инструмента закрывают разные половины задачи.

Старые хелперы для 2Captcha продолжают работать

Хелперы, которые вы написали под 2Captcha или Anti-Captcha, не нужно править. Выберите этот сервис в качестве эмулятора в приложении, нажмите Add рядом с Hosts file, и CapSkip сам ответит на эти вызовы.

Параллельные драйверы на одной подписке

Запускайте столько экземпляров WebDriver, сколько выдержит машина. Тариф никогда не ограничивает потоки, а набор тестов, встречающий сотни капч, ничего не добавляет к ежемесячному счёту.

Выберите, как ваш код на WebDriver подключается к CapSkip

Python
from selenium import webdriver
from capskip import CapSkip

driver = webdriver.Chrome()
driver.get("https://example.com/login")

solver = CapSkip(host="127.0.0.1", port=8080)
sitekey = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-sitekey")

token = solver.recaptcha(sitekey=sitekey, url=driver.current_url)["code"]

# Inject the token and submit
driver.execute_script(
    "document.getElementById('g-recaptcha-response').innerHTML = arguments[0];",
    token,
)
driver.find_element("css selector", "button[type=submit]").click()

Python Selenium: считайте sitekey из виджета, запросите токен у CapSkip, запишите его в поле ответа и нажмите кнопку отправки.

Расширение в профиле Selenium

Загрузите расширение для Chrome или Firefox в профиль, который запускает Selenium. Виджеты решаются на месте, поэтому в вашем тесте вообще нет кода для распознавания.

Вызовы SDK рядом с локаторами

Клиенты для Python, Node.js, PHP и C# возвращают токены и текст с картинок, готовые для execute_script или send_keys в той привязке WebDriver, которую вы используете.

Локальный API для всех прочих привязок

Java и другие привязки без SDK могут вызывать HTTP API напрямую, а код Selenium, написанный под сервисы в стиле 2Captcha, работает, как только включён эмулятор.

Проверьте свой скрипт Selenium на живой reCAPTCHA

Направьте WebDriver на нашу демо-страницу reCAPTCHA v2, выполните шаг решения на настоящем виджете Google и посмотрите, как форма принимает токен, прежде чем переходить к своим целевым сайтам.

Подготовьте CapSkip рядом с набором тестов Selenium

  1. Установите CapSkip на тестовую машину

    Установите CapSkip на компьютер с Windows или VPS, где выполняются ваши скрипты WebDriver, или на любую машину, доступную этим скриптам по сети, и держите его запущенным, пока идут тесты. Скачать установщик

  2. Активируйте тариф или пробный период

    Войдите в CapSkip с данными, которые пришли на почту вместе с заказом. Пробный период даёт одному устройству три дня и 500 решений, этого достаточно, чтобы прогнать набор тестов на реальных сайтах. Оформите бесплатный пробный период

  3. Добавьте шаг решения в код драйвера

    Либо запустите Selenium с профилем, где установлено расширение, либо выполните pip install capskip и вызывайте решатель везде, где капча прерывает ваш сценарий. Каждый метод и каждая опция описаны в документации. Открыть документацию API

Локальное распознавание против API с поштучной оплатой в Selenium

Чем CapSkip отличается от сервисов вроде 2Captcha, когда ваши прогоны Selenium ежедневно сталкиваются с капчами.

ФункцияCapSkip2Captcha & API-сервисы
Стоимость полного прогона тестовТот же ежемесячный тариф от $35 при любом числе решенийОплата за каждое решение: больше тестов, больше счёт
Где решается капчаНа машине, которая управляет браузерами, или на VPSНа удалённых серверах, часто живыми работниками
Время решения капчи-картинкиОколо 0,1 секунды, без передачи через интернетНесколько секунд плюс сетевой путь туда и обратно для каждой картинки
Уже написанный код для 2CaptchaПродолжает работать через встроенный эмуляторПривязан к API поставщика и его балансу
Скриншоты сессии и данные капчиОстаются на вашей машинеОтправляются стороннему сервису при каждом решении
Параллельные сессии WebDriverТариф не ограничивает потоки, предел задаёт только железоДополнительная параллельность часто стоит дороже
Способы подключения к SeleniumПрофиль с расширением, клиент для Python или .NET либо обычные HTTP-вызовыAPI-ключ, предоплаченный баланс и собственный клиент

Цены

Хватит платить за каждое решение

Выберите лицензию

Лицензия Bronze

$35/ месяц

Подписаться на Bronze

Мгновенная активация лицензии

Оплата помесячно. Отменить подписку можно в любой момент в личном кабинете.

Функции те же. Больше машин, больше производительность.

Каждая машина решает настолько быстро, насколько позволяют её процессор и память. Больше машин означает больше одновременных потоков, поэтому Silver решает вдвое больше капч одновременно, а Gold втрое больше.

  • Безлимитное решение, без дневных ограничений
  • Безлимитные потоки, скорость растёт вместе с оборудованием
  • Точность распознавания от 90% до 100%
  • Прямая замена API основных сервисов распознавания
  • Работает почти с любым инструментом, без программирования
  • REST API, SDK и расширение для браузера
  • Бесплатное обучение, когда появляется новый тип капчи
  • Работает на вашей машине, ничего с неё не уходит

Каждый тип капчи, показанный выше, входит в любую лицензию. Посмотреть список типов

Просто хотите сначала попробовать?

Начните с бесплатного 3-дневного пробного периода и решите 500 капч любого типа на своих целевых сайтах.

Оформите бесплатный пробный период

Решение reCAPTCHA в Selenium на Python: расширение или SDK

Когда капча блокирует сценарий, Selenium даёт вам два надёжных варианта: позволить браузерному расширению решить её прямо на странице или решить её из скрипта и подставить ответ. Оба опираются на приложение CapSkip, запущенное там, куда может достучаться ваш тест, а выбор зависит от того, сколько контроля нужно тесту.

Путь через расширение. Создайте профиль Chrome, установите в него расширение CapSkip и запустите webdriver.Chrome с этим профилем через аргумент user-data-dir; для Firefox вызовите driver.install_addon() с файлом дополнения. Запускайте браузер с окном или с --headless=new, поскольку старый headless-режим не загружает расширения. После этого виджеты reCAPTCHA, Turnstile и GeeTest v3 решаются на месте, а вашему WebDriverWait остаётся только дождаться, пока форма пойдёт дальше.

Путь через SDK. Установите клиент командой pip install capskip (Python 3.10 или новее) и создайте один solver на всю сессию, по умолчанию нацеленный на 127.0.0.1 и порт 8080. Для reCAPTCHA возьмите data-sitekey из элемента .g-recaptcha или значение k в src iframe reCAPTCHA, если виджет отрисовывается через JavaScript, затем вызовите solver.recaptcha() с driver.current_url. Невидимому виджету нужен invisible=1, а для v3 требуются version v3 и строка action, которую страница передаёт при запуске проверки. Задайте g-recaptcha-response через execute_script, выполните data-callback, если виджет его указывает, и отправьте форму в течение двух минут. Для Turnstile подставьте solver.turnstile() и скрытое поле cf-turnstile-response; остальной сценарий не меняется.

Для шага распознавания капчи-картинки в Python Selenium считайте screenshot_as_base64 из элемента img, передайте эту строку в solver.normal() с префиксом data:image/png;base64 и введите результат через send_keys. Никогда не загружайте URL изображения повторно: большинство капч-картинок привязаны к сессии, и второй запрос выдаст новую картинку. Для reCAPTCHA и Turnstile передайте CapSkip прокси, который использует ваш браузер (HTTP, HTTPS, SOCKS5 или SOCKS5h); для картинок прокси не нужен.

Руководства по теме: капча в undetected-chromedriver · капча в SeleniumBase · Капча в Selenium Grid

Как быстрее всего решить reCAPTCHA в Selenium на Python?
Держите приложение CapSkip запущенным, выполните pip install capskip и считайте data-sitekey из элемента .g-recaptcha. Вызовите solver.recaptcha() с этим ключом и driver.current_url, при необходимости добавив invisible=1 или version v3 вместе с action страницы. Запишите полученный код в g-recaptcha-response через execute_script, вызовите data-callback, если он есть, и отправьте форму.
Что выбрать для проекта на Selenium: расширение или SDK?
Используйте расширение, если вам не нужен никакой код для решения: профиль браузера сам справляется с каждым виджетом, пока идут ваши ожидания. Используйте SDK, когда тест должен сам определять момент решения, записывать результат в лог, повторять попытки или работать в старом headless-режиме. Можно начать с расширения и позже перевести нагруженные сценарии на SDK.
Как установить расширение в браузер, который открывает Selenium?
Для Chrome установите расширение из Chrome Web Store в отдельный профиль, затем запустите Selenium с этим профилем через аргумент user-data-dir. Для Firefox передайте файл дополнения в driver.install_addon(). Работайте с окном браузера или с --headless=new, потому что устаревший headless-режим не умеет загружать расширения, и держите приложение CapSkip открытым, пока идут тесты.
Как Selenium передаёт капчу-картинку в CapSkip?
Найдите элемент img с капчей, считайте его свойство screenshot_as_base64 и передайте в solver.normal() с префиксом data:image/png;base64. Введите полученные символы в поле ответа через send_keys. Скриншот лучше, чем скачивание по URL изображения, потому что сайт привязывает картинку к вашей сессии, и новый запрос покажет другие буквы.
Справляется ли он с Cloudflare Turnstile в Selenium, включая полноэкранную проверку?
Да. Для виджета считайте data-sitekey из элемента .cf-turnstile, вызовите solver.turnstile() с URL страницы и запишите токен в cf-turnstile-response перед отправкой. Если вместо этого Cloudflare показывает полноэкранную проверку, CapSkip решает и её, возвращая вместе с токеном userAgent; используйте его до конца этой сессии Selenium, чтобы пропуск оставался действительным.
Форма всё равно не принимает подставленный токен. Что обычно идёт не так?
Большинство случаев объясняются тремя причинами: токен старше двух минут, data-callback так и не был вызван, или на странице несколько виджетов, и она отправляет g-recaptcha-response-1 вместо первого поля. Решайте капчу непосредственно перед отправкой, вызывайте callback и проверьте в сетевой панели браузера, какое поле на самом деле отправляет форма.
Можно ли вызывать CapSkip из Selenium на C#, Node.js или Java?
Да. Проекты WebDriver на C# добавляют клиент для .NET командой dotnet add package CapSkip, а selenium-webdriver в Node.js использует npm install capskip; шаги поиска, решения и подстановки повторяют сценарий на Python. У Java и других привязок нет SDK, поэтому они вызывают локальный HTTP API напрямую через любой HTTP-клиент.
Работает ли решатель с headless Chrome и Selenium Grid?
Путь через SDK работает в любом режиме браузера, потому что решение выполняется внутри CapSkip, а тесту нужно лишь достучаться до его хоста и порта. В Grid это всё упрощает: решатель вызывает тестовый скрипт, а не узел. Путь через расширение требует Chrome с окном или нового headless-режима.

Пусть набор тестов Selenium доходит до конца каждого прогона

Установите CapSkip рядом с драйвером, войдите в аккаунт и выберите расширение или SDK. Ваш следующий прогон WebDriver решит свои капчи локально, а ежемесячный счёт не изменится, на что бы ни наткнулся набор тестов.