CaptchaNo
[ ИНТЕГРАЦИЯ ]

Решение капчи для
Selenium

Проходите проверку прямо в ходе запуска, а не проваливайте задание. Рабочий пример на Python и три фактора, от которых зависит, будет ли принят ваш токен.

Selenium · Python
import time
import requests

CAPTCHANO_KEY = "cn-YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {CAPTCHANO_KEY}"}

def solve(task: dict) -> dict:
    """Block until solved; returns e.g. {"token": "...", "userAgent": "..."}."""
    r = requests.post(
        "https://api.captchano.com/v1/solve",
        params={"wait": 60},
        json=task,
        headers=HEADERS,
        timeout=75,
    )
    data = r.json()
    # A solve can outlast the 60 s wait: poll the task until it finishes.
    while data.get("status") in ("queued", "solving"):
        time.sleep(5)
        data = requests.get(
            f"https://api.captchano.com/v1/task/{data['id']}",
            headers=HEADERS,
            timeout=30,
        ).json()
    if data.get("status") != "ready":
        raise RuntimeError(data.get("error") or data)
    return data["solution"]

from selenium import webdriver
from selenium.webdriver.common.by import By

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

sitekey = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")
solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": driver.current_url})

driver.execute_script(
    "document.getElementById('g-recaptcha-response').value = arguments[0]",
    solution["token"],
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

От чего зависит, будет ли принят токен

  1. Передавайте свой прокси. Токен должен быть получен с того же исходящего IP, с которого он отправляется. Для систем с оценкой сессии это обязательное условие, а не оптимизация.
  2. Совпадение user agent. Turnstile и ряд антибот-систем привязывают токен к user agent. Мы возвращаем использованный user agent, чтобы вы могли воспроизвести его в точности.
  3. Запрашивайте как можно позже. Токены истекают примерно через 120 секунд. Запрашивайте токен, когда будете готовы к отправке.

Блокирующий вызов или опрос

В примере используется ?wait=60, поэтому вызов возвращает готовое решение, и шаг в Selenium остаётся линейным. Если не хотите держать соединение, уберите параметр, сохраните полученный id и опрашивайте GET /v1/task/{id} каждые пять секунд. Оплаченный токен можно получить в течение десяти минут, так что обрыв соединения не стоит вам решения.

Стоимость

$0.00598 за каждое успешное решение reCAPTCHA v2; неудачные решения никогда не оплачиваются. Цены на все типы проверок — на странице цен, полный формат запроса — в справочнике API.

[ КАК ЭТО РАБОТАЕТ ]

Как решение встраивается в Selenium

Selenium управляет настоящим браузером, поэтому проверка отображается так же, как её увидел бы пользователь. Прочитайте sitekey из DOM, запросите токен и запишите его обратно через execute_script перед нажатием кнопки отправки.

  1. 01
    Загрузите страницу

    Откройте целевую страницу с теми же прокси и user agent, с которых будете отправлять форму.

  2. 02
    Прочитайте sitekey

    find_element по [data-sitekey] и прочитайте атрибут, а также data-callback, если он есть.

  3. 03
    Решите

    Отправьте POST с type, sitekey и driver.current_url на /v1/solve?wait=60 с теми же прокси и user agent.

  4. 04
    Подставьте токен и отправьте

    execute_script, чтобы заполнить поле ответа и вызвать callback, затем нажмите кнопку отправки.

Как передать токен на страницу

driver.execute_script заполняет скрытое поле g-recaptcha-response или cf-turnstile-response и, если страница его использует, вызывает callback виджета.

[ ПОДВОДНЫЕ КАМНИ ]

Где интеграции обычно ломаются

Callback не вызван

Многие страницы активируют кнопку отправки из callback виджета. Если только заполнить поле, кнопка останется неактивной.

Скрытое поле не найдено

Textarea для ответа создаётся при отрисовке виджета. Дождитесь iframe виджета, прежде чем подставлять токен.

Несовпадение прокси

Прокси в Selenium задаётся при запуске драйвера. Передайте ту же строку прокси в запрос на решение, чтобы токен и отправка шли с одного IP.

[ ВОПРОСЫ ]

Частые вопросы о капче в Selenium

Может ли Selenium сам решить reCAPTCHA?

Нет. Selenium управляет браузером, но не может ответить на задание с картинками, а автоматизированным браузерам его показывают чаще. Вы запрашиваете токен у API решения капчи и подставляете его, как в примере на этой странице.

Работает ли это с undetected-chromedriver или Selenium Grid?

Да. Интеграция только читает DOM и выполняет JavaScript, поэтому работает с любой сессией WebDriver, локальной или удалённой, если вы передаёте в запрос на решение те же прокси и user agent.

Куда помещать токен для Turnstile?

Turnstile использует скрытое поле input с именем cf-turnstile-response внутри формы. Задайте его значение и вызовите callback, указанный в data-callback, если страница его объявляет.

Что делать с капчей, которая появляется лишь иногда?

Проверяйте наличие виджета после каждой навигации и вызывайте API, только если он есть. Оплата взимается за каждое успешное решение, так что проверка ничего не стоит.

[ ЧТО ПОЧИТАТЬ ]

Полезные руководства

Готовы начать?

Начните с бесплатного 3-дневного пробного периода, а по мере роста трафика платите за каждое успешное решение. Для пробного периода карта не нужна.

Посмотреть тарифы
Вы ИИ-агент? Посмотрите варианты подключения →