Ко всем шагам

Собрать данные

Поля шага
{"container":".product-card","limit":100,"fields":[{"name":"Название","selector":"h3","attr":"text"},{"name":"Цена","selector":".price","attr":"text"},{"name":"Ссылка","selector":"a","attr":"href"}]} (text)
Собирает со страницы структурированные данные: список однотипных карточек (товары, вакансии, объявления) или один объект. Результат виден на вкладке «Данные» отчёта прогона, выгружается в CSV/JSON и доступен по API.
Параметр - JSON: {"container":".product-card","limit":100,"fields":[{"name":"Цена","selector":".price","attr":"text"}]}
container - селектор повторяющегося блока, селекторы полей ищутся внутри него; пустой container - собирается один объект. Если не найдено ни одной карточки, шаг падает: селектор устарел.
В Визуализаторе писать JSON руками не нужно - есть кнопка «Выбрать поля на странице». Число строк ограничено тарифом. AI-токены шаг не тратит.
Про конструктор полей, пагинацию ("append": true) и лимиты - в справке по действию.
Пример использования

Собрать со страницы структурированные данные - список однотипных карточек или один объект. Результат виден на вкладке «Данные» отчёта прогона, выгружается в CSV/JSON и доступен по API. Параметр - JSON. AI-токены/деньги шаг не тратит.

Список карточек (типовой случай):

{
  "container": ".product-card",
  "limit": 100,
  "fields": [
    { "name": "Название", "selector": "h3", "attr": "text" },
    { "name": "Цена",     "selector": ".price", "attr": "text" },
    { "name": "Ссылка",   "selector": "a", "attr": "href" }
  ]
}

Селекторы полей ищутся внутри карточки, поэтому они короткие (h3, а не .product-card h3).

Один объект (карточка товара, страница заказа):

{
  "fields": [
    { "name": "Товар", "selector": "h1", "attr": "text" },
    { "name": "Цена",  "selector": ".product-price", "attr": "text" },
    { "name": "Наличие", "selector": ".stock-badge", "attr": "text" }
  ]
}

container не указан - собирается одна строка, селекторы действуют на всю страницу.

Сколько строк соберётся (тариф). Потолок строк за один шаг задан тарифом: на бесплатном, «Старте» и «за тест» - 10 строк (этого хватает и режиму одного объекта - там строка всего одна), на Pro - 100, на старших тарифах тарифного потолка нет. Лишнее отрезает сервер, а причину пишет в лог шага: «лимит тарифа» - чтобы обрезанная таблица не выглядела как поломка селектора. Пагинация обходом не является: при накоплении потолок считается по сумме всех страниц, а не по одной.

Что можно взять (attr):

  • text - видимый текст (по умолчанию)
  • html - внутренний HTML элемента
  • href / src - ссылка и картинка (абсолютный URL)
  • value - значение поля формы
  • любой атрибут: data-id, title, alt

Поведение: поле, которого нет в карточке, останется пустым - карточка всё равно попадёт в датасет. Если не найдено ни одной карточки, шаг падает: это признак устаревшего селектора.

Совет: поставьте перед шагом «Ждать появление элемента» с селектором карточки, если витрина догружается скриптом - иначе шаг снимет пустую страницу.

Шаг работает и в превью/рекордере: там собирается сокращённая выборка, чтобы сразу увидеть, что попадёт в датасет.

В Визуализаторе JSON писать не нужно. Откройте тест в режиме Визуализатора и нажмите в шаге «Выбрать поля на странице»:

  • клик по карточке товара - шаг сам находит контейнер и показывает, сколько таких карточек нашлось на странице;
  • клики по цене, названию, ссылке - собирают список полей; имя колонки подставляется по содержимому (Цена, Название, Ссылка);
  • таблица предпросмотра показывает, что реально попадёт в датасет; колонки переименовываются прямо в её заголовках;
  • JSON внизу формы обновляется сам - его можно не трогать.

Над кнопкой стоит переключатель «Список / Один объект». Список - на странице много одинаковых блоков (витрина, таблица, лента): первый клик ищет повторяющийся блок. Один объект - забрать надо одно значение или одну карточку: контейнер не ищется вовсе, каждый клик сразу добавляет колонку. Переключайтесь на Один объект, если автоопределение приняло за витрину подсветку текста или общую обёртку страницы и показало десятки «карточек» с одним значением. Смена режима сбрасывает подбор: в режиме списка селекторы полей относительные (внутри карточки), в режиме одного объекта - абсолютные.

В обычном редакторе теста этого конструктора нет: там нет живой страницы, по которой можно кликать, поэтому параметр вводится как JSON.

Пагинация: собрать все страницы в одну таблицу. Добавьте в параметр "append": true и поставьте шаг в цикл граф-теста:

Цикл (пока верно: «Видеть элемент» .pagination .next, лимит 50)
 └─ тело:  Собрать данные  →  Клик .pagination .next  →  Ждать .product-card
{
  "container": ".product-card",
  "append": true,
  "fields": [
    { "name": "Название", "selector": "h3", "attr": "text" },
    { "name": "Цена",     "selector": ".price", "attr": "text" }
  ]
}

С флагом снимки всех витков склеиваются в один датасет: одна таблица в отчёте (с пометкой, из скольких страниц собрана), одна выгрузка CSV, один ответ API. Без флага каждый виток даёт отдельную таблицу - двадцать страниц приедут двадцатью выгрузками.

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

Мониторинг изменений на пагинации: ставьте шаг «Сравнить с прошлым прогоном» ПОСЛЕ цикла с пустым селектором - он возьмёт накопленный датасет целиком. Внутри цикла он сравнивал бы страницу с той же по счёту страницей прошлого прогона, и один новый товар сдвинул бы всю витрину на позицию.