К содержимому

Документация

Python SDK: Работа с CAPTCHA: сценарии и их устройство

В этом разделе разбираем 12 сценариев ScrapingCourse на Python. Здесь есть полный каталог, постраничная выдача, кнопка загрузки, прокрутка, вход, JavaScript-отрисовка, таблица и контрольные страницы. Для каждого варианта приведены параметры, полный код и объяснение шагов.

С чего начать

  1. Откройте сайт с адресом https://www.scrapingcourse.com или добавьте его в своё пространство.
  2. Выберите сценарий из списка ниже и язык Python.
  3. Скопируйте полный код из его статьи. Введите path, mode и expected в параметрах запуска точно как в примере.
  4. Для каталога подготовьте поля name (строка), price (число) и image (строка). Контрольным страницам нужны name (строка) и passed (логическое).
  5. Проверьте пробный результат, затем сохраняйте версию и настраивайте расписание под свою задачу.

Где в алгоритме CAPTCHA

Сценарий описывает действия с данными: открывает страницу, заполняет форму, ждёт товары и сохраняет записи. Работа с дополнительной проверкой страницы определяется настройками сайта и параметром auto_captcha. Её внутренние механизмы не являются частью алгоритма извлечения полей.

В полном исходнике auto_captcha по умолчанию равен true. Значение false отключает автоматическую обработку для запросов и браузерной сессии этого запуска. В PHP, JavaScript и TypeScript в SDK передаётся аргумент autoCaptcha, в Python он называется auto_captcha; в этих исходниках используется позиционная передача значения auto.

Отдельный вызов решения проверки примеры не используют. Успех сценария определяется полученными данными или контрольной фразой страницы.

Настройки CAPTCHA и расходы · Параметры SDK и API

Параметры общего исходника

Параметр Назначение
path Путь после https://www.scrapingcourse.com, например /pagination.
mode Ветка: http, browser, button, scroll, login или challenge.
expected Ожидаемое число уникальных товаров; для контрольной страницы указан один результат.
auto_captcha Необязательный логический параметр, по умолчанию true.

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

Как устроен сбор полей

В начале запуска создаётся seen: память ключей, уже обработанных в этом запуске. Сборщик выбирает .product-item, li.product, читает название и пропускает элементы без названия. Ссылка карточки используется как ключ, имя служит запасным вариантом. Поэтому товары с одинаковыми названиями, но разными ссылками остаются отдельными записями.

name берётся из .product-name, .woocommerce-loop-product__title, price из .product-price, .price и преобразуется методом money. В image записывается адрес из img[src]. Сохранение самого файла и работа с хранилищем описаны в Storage.

Второй аргумент emit задаёт ключ записи. Повторное чтение всей страницы не создаёт новый результат для уже встреченного ключа: его отсеивает seen. Состояние сохраняется только внутри данного запуска; между запусками пример не хранит список в KeyValue.

В HTTP-ветке есть отдельная память visited для адресов страниц. Не путайте её с seen: страницы могут быть разными, но содержать один товар. В браузерной ветке finally освобождает страницу даже при ошибке.

Что важно в Python

В Python SDK работает последовательно: async и await в этом примере не нужны. Имена методов записаны через подчёркивание: without_cache, wait_for, wait_for_response. Вложенная collect использует общий set с ключами и возвращает число карточек в текущем HTML. В finally вызывается page.close().

Для входа email сначала читается из текстовой подсказки. Если страница представляет его атрибутом data-cfemail, код также умеет прочитать этот вариант. Пароль берётся из той же открытой демонстрационной подсказки.

Все 12 сценариев

Пример Режим Ожидаемый результат
Интернет-магазин: все страницы каталога http 188
Пагинация: переход по ссылке «Далее» http 147
Кнопка «Показать ещё»: загрузка порциями button 147
Бесконечная прокрутка: дождаться конца ленты scroll 147
Вход на сайт: получить каталог после авторизации login 12
Вход с CSRF: сохранить состояние формы login 12
Форма входа Cloudflare: продолжить сбор в одной сессии login 12
Форма с Turnstile: дождаться каталога после входа login 12
JavaScript-страница: дождаться заполненных карточек browser 12
Табличный каталог: получить строки товаров http 15
Страница Cloudflare: проверить полученное содержимое challenge 1
Страница Antibot: сохранить результат проверки challenge 1

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

Облако и собственный агент

Один исходник можно запускать в облаке или на своём агенте. Место выполнения выбирается в настройках сайта. Для браузерных примеров агенту нужны поддержка браузера и исполнитель выбранного языка. Разбор полей и параметры запуска остаются теми же. Порядок подключения описан в разделе об агентах.