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

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

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

Scrapy · Python
# middlewares.py
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"]

class CaptchaNoMiddleware:
    def process_response(self, request, response, spider):
        sitekey = response.css("[data-sitekey]::attr(data-sitekey)").get()
        if not sitekey:
            return response
        solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": response.url})
        return request.replace(
            method="POST",
            body=f"g-recaptcha-response={solution['token']}",
            headers={"Content-Type": "application/x-www-form-urlencoded"},
            dont_filter=True,
        )

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

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

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

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

Стоимость

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

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

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

В Scrapy нет браузера, поэтому капча обрабатывается в downloader middleware: обнаружьте проверку в ответе, решите её и повторите запрос с токеном или cookie.

  1. 01
    Обнаружение в process_response

    Ищите data-sitekey или известную страницу проверки в теле ответа.

  2. 02
    Решите

    Вызовите API с sitekey, response.url и прокси из request.meta.

  3. 03
    Повторите с токеном

    Верните FormRequest с токеном или исходный запрос с полученной cookie.

  4. 04
    Сохраняйте cookie

    Пусть cookie middleware Scrapy сохраняет пройденную сессию для следующих запросов.

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

Middleware добавляет токен в данные формы или устанавливает полученную cookie, а затем возвращает новый Request.

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

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

Блокировка реактора

Синхронный HTTP-вызов в middleware останавливает все запросы. Используйте асинхронный клиент или отдельный поток для решения.

Ротация прокси

Если прокси-middleware меняет IP на каждый запрос, зафиксируйте IP для повтора, чтобы он совпадал с решением.

Циклы повторов

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

[ ВОПРОСЫ ]

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

Может ли Scrapy решать JavaScript-проверки?

Scrapy не выполняет JavaScript. Для проверок с токенами нужны только sitekey и URL; для систем с оценкой сессии, таких как DataDome, вы отправляете URL проверки и получаете cookie, которую Scrapy может использовать повторно.

Может, лучше использовать scrapy-playwright?

Только если странице нужен JavaScript для отрисовки контента. Для капч с токенами подход с middleware легче и быстрее, чем запуск браузера на каждый запрос.

Где должен стоять middleware?

После прокси-middleware и перед retry middleware — так он видит прокси, который будет использован, а его собственные повторы не учитываются дважды.

Как не платить за повторные решения?

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

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

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

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

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

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