Блог / API для решения капчи на Python

API для решения капчи на Python: как подключить и автоматизировать

Каждый, кто работал с парсингом данных или автоматизацией веб-задач, рано или поздно сталкивается с капчей. Сайты ставят её как барьер от ботов, и для скриптов на Python это становится реальной проблемой. Ручной ввод не спасает, когда нужно обработать тысячи страниц. Именно поэтому появились сервисы с API для автоматического решения капчи, которые легко встраиваются в Python-проекты.

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

Как устроено API для решения капчи

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

Ваш скрипт Python страница Модуль Cap.Guru captcha_solver данные Сервер Cap.Guru ИИ клики Капча решена 2–40 сек
Схема работы: скрипт передаёт страницу модулю, модуль взаимодействует с сервером и решает капчу в браузере

Самый удобный вариант для Python: модуль, который принимает объект страницы браузера и сам взаимодействует с капчей, кликая по картинкам, двигая слайдеры и выполняя другие визуальные действия. Вам не нужно вручную парсить параметры и подставлять ответы. Весь процесс занимает от 2 до 40 секунд в зависимости от типа капчи и загрузки сервиса.

Какие типы капч поддерживаются

Современные сервисы работают далеко не только с простыми картинками. Вот основные категории:

Графические Клики по картинкам, координаты, пазлы reCAPTCHA v2 Чекбокс, выбор картинок hCaptcha Альтернатива reCAPTCHA, выбор объектов GeeTest / FunCaptcha Пазлы, слайдеры, вращение объектов Amazon WAF Защита сервисов AWS, доп. параметры Капчи платформ Поисковые системы, крупные площадки Рунета
Основные типы капч, которые поддерживают современные сервисы решения

Графические капчи. Капчи, где нужно выбрать определённые объекты на картинке, кликнуть по координатам или решить визуальную задачу. Распознаются быстрее всего.

reCAPTCHA v2. Продукт Google, который стоит на миллионах сайтов. Показывает чекбокс «Я не робот» и иногда просит выбрать картинки.

hCaptcha. Популярная альтернатива reCAPTCHA. Часто встречается на сайтах, которые хотят зарабатывать на показах капчи, а не платить Google. Логика обхода аналогична reCAPTCHA v2: нужно получить ответ от сервиса и вставить его в форму.

GeeTest, FunCaptcha (Arkose Labs), Amazon WAF. Более редкие, но всё чаще встречающиеся на крупных площадках. GeeTest просит собрать пазл, FunCaptcha просит повернуть объект. Amazon WAF защищает сервисы AWS. Работа с ними требует передачи дополнительных параметров в API.

Капчи поисковых систем и крупных платформ. Если вы работаете с площадками Рунета (собираете позиции, анализируете выдачу, мониторите поведенческие метрики), рано или поздно столкнётесь с собственными системами защиты этих сервисов. Они отличаются от Google reCAPTCHA и далеко не все международные провайдеры умеют с ними работать. Стоит выбирать сервисы, которые явно заявляют поддержку капч от таких платформ.

Подключение через Python: модуль Cap.Guru

Модуль Cap.Guru работает через браузер: вы передаёте ему объект страницы (Playwright) или драйвер (Selenium), а он сам находит капчу, отправляет данные на сервер и выполняет нужные действия прямо на странице. Кликает по картинкам, двигает слайдер, собирает пазл. Вам остаётся только вызвать один метод.

Playwright + Stealth Асинхронный, await solver.solve_*() ✓ Рекомендуемый способ Selenium + UC Синхронный, solver.solve_*() Для привычных к Selenium или
Модуль поддерживает оба инструмента: Playwright (асинхронно) и Selenium (синхронно)

Установка

Модуль распространяется как папка captcha_solver, которую нужно скопировать в свой проект. Скачать актуальную версию можно из документации Cap.Guru.

Playwright + Stealth (рекомендуемый способ)

Для максимальной незаметности автоматизации лучше использовать Playwright с библиотекой stealth, которая скрывает признаки автоматического управления браузером:

# pip install playwright playwright-stealth
# playwright install chrome

import asyncio
from playwright.async_api import async_playwright
from playwright_stealth import stealth_async
from captcha_solver import CaptchaSolver

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False,
            channel="chrome",
            args=["--disable-blink-features=AutomationControlled"],
        )
        page = await browser.new_page()
        await stealth_async(page)
        await page.goto("https://site.com/page-with-captcha")

        solver = CaptchaSolver(
            page=page,
            api_key="YOUR_KEY",
            debug=True,
            attempts=5,
        )
        await solver.solve_recaptcha2()
        await browser.close()

asyncio.run(main())

Параметр attempts задаёт, сколько раз модуль попробует решить капчу, если первая попытка не удалась. Режим debug=True выводит в консоль подробные логи, что полезно при отладке.

Selenium + undetected-chromedriver

Если вы привыкли работать с Selenium, модуль поддерживает и его. В связке с undetected-chromedriver это выглядит так:

# pip install undetected-chromedriver

import undetected_chromedriver as uc
from captcha_solver import CaptchaSolver

def main():
    driver = uc.Chrome(headless=False)
    try:
        driver.get("https://site.com/page-with-captcha")
        solver = CaptchaSolver(
            driver=driver,
            api_key="YOUR_KEY",
            debug=True,
            attempts=5,
        )
        solver.solve_other()
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Обратите внимание: в Selenium-варианте методы вызываются синхронно (без await), а в Playwright асинхронно.

Доступные методы

Модуль предоставляет отдельный метод под каждый тип капчи:

await solver.solve_recaptcha2()    # Google reCAPTCHA v2
await solver.solve_hcaptcha()      # hCaptcha
await solver.solve_geetest()       # GeeTest (пазлы, слайдеры)
await solver.solve_funcaptcha()    # Arkose FunCAPTCHA
await solver.solve_tiktok()        # TikTok капча
await solver.solve_other()         # Универсальный метод

Метод solve_other() универсальный. Он подходит для случаев, когда вы не уверены в типе капчи или сайт использует нестандартную защиту. Модуль сам определит тип и попробует решить.

Если нужно указать конкретный контейнер с капчей на странице (например, когда их несколько), используйте параметр selector:

solver = CaptchaSolver(
    page=page,
    api_key="YOUR_KEY",
    selector="#captcha-container",  # CSS-селектор блока с капчей
)

Когда это особенно полезно

Подход с передачей страницы в солвер хорошо работает в нескольких сценариях. Первый: капчи с визуальным взаимодействием (клики по картинкам, drag-and-drop, слайдеры). Модуль Cap.Guru кликает и двигает ползунок автоматически.

Второй сценарий: капча появляется непредсказуемо. Вы не знаете заранее, будет ли на странице reCAPTCHA, hCaptcha или что-то ещё. Метод solve_other() снимает эту проблему.

Третий: быстрое прототипирование. Если нужно за 15 минут написать скрипт, который заходит на сайт и проходит капчу, подход «передал страницу, вызвал метод» экономит кучу времени.

Обработка ошибок

В реальных проектах капча не всегда решается с первого раза. Сервис может быть перегружен, на API-ключе закончился баланс, картинка нечитаемая. Модуль Cap.Guru выбрасывает RuntimeError, если за все попытки решить капчу не удалось:

try:
    await solver.solve_recaptcha2()
except RuntimeError as e:
    if "ERROR_CAPTCHA_UNSOLVABLE" in str(e):
        print("Капча не решена, попробуйте увеличить attempts")
    else:
        print(f"Ошибка решения: {e}")

Параметр attempts при инициализации CaptchaSolver определяет, сколько попыток будет сделано. По умолчанию 5. Для сложных капч с высокой вариативностью (GeeTest, FunCaptcha) имеет смысл поднять до 8–10.

Если сервис вернул неправильный ответ, об этом стоит сообщить через метод report. Это улучшает качество распознавания и иногда позволяет вернуть средства за ошибочно решённую капчу.

На что обратить внимание при выборе сервиса

Критериев несколько, и цена не единственный.

Скорость. Для простых капч нормальное время составляет 5–10 секунд. Для reCAPTCHA обычно 2–10 секунд. Если вы парсите в многопотоке, скорость решает.

Точность. У хороших сервисов она выше 95%. Не все провайдеры гарантируют стабильный результат на сложных капчах.

Поддержка типов капч. Если вам нужен только reCAPTCHA v2, подойдёт практически любой сервис. А вот GeeTest v4 или капчи поисковых систем Рунета поддерживают не все.

Документация и SDK. Наличие готового Python-модуля с нормальной документацией это огромный плюс. Экономит часы на интеграцию. Хорошо, когда есть примеры для разных инструментов: Selenium, Playwright, undetected-chromedriver.

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

Частые ошибки при интеграции

Несколько граблей, на которые наступают регулярно:

1. Неправильные параметры капчи. Если сайт обновил защиту или вы скопировали данные с другой страницы, ответ не пройдёт валидацию. Всегда получайте параметры динамически, непосредственно перед отправкой.

2. Слишком частый опрос сервера. Если ставить интервал меньше 5 секунд, сервис может начать отвечать ошибками. Оптимально 5–10 секунд между запросами.

3. Игнорирование таймаутов. reCAPTCHA иногда решается 2–3 минуты. Если ваш скрипт ждёт 30 секунд и падает, вы просто теряете деньги.

4. Отсутствие retry-логики. Сервис может вернуть временную ошибку. Один повтор через 10 секунд часто решает проблему.

Заключение

Подключение API для решения капчи на Python не требует глубоких знаний, если понимать базовые принципы. Модуль Cap.Guru позволяет свести интеграцию к нескольким строкам: передаёте объект страницы, вызываете метод для нужного типа капчи, а модуль сам кликает, двигает слайдеры и проходит проверку в браузере.

Для капч с визуальным взаимодействием (клики по картинкам, слайдеры, GeeTest-пазлы) это самый простой и надёжный способ автоматизации. Поддерживаются и Playwright, и Selenium, есть универсальный метод solve_other() для непредсказуемых ситуаций.

Главное: тестируйте на реальных задачах. Демо-страницы капч могут вести себя иначе, чем боевые сайты с дополнительными проверками вроде анализа User-Agent, cookies и fingerprint браузера.