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

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

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

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

С чего начать

  1. Откройте сайт с адресом https://www.scrapingcourse.com или добавьте его в своё пространство.
  2. Выберите сценарий из списка ниже и язык PHP.
  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 освобождает страницу даже при ошибке.

Что важно в PHP

В PHP сетевые и браузерные методы вызываются последовательно через ->. Функция courseCollect получает массив $seen и возвращает его обновлённую копию, поэтому результат каждого вызова присваивается обратно. Объект страницы закрывается в finally. Для остановки с понятным сообщением используется $ctx->fail().

Все 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

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

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

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