Предметы для повседневной жизниУчебный магазин

Учебный фиксированный курс: 1 USD = 100 ₽.

Один магазин.
Разные способы получить данные.

Демонстрационный сайт для обучения «Акмело». Во всех вариантах используются одни и те же 10 000 вымышленных товаров. Изменяется способ их загрузки и перехода между страницами.

Каталог и ссылки

Товары находятся в исходном HTML. Страницы переключаются ссылками с параметром page.

/market

Бесконечная прокрутка

Следующая порция появляется при прокрутке. Кнопка загрузки доступна и с клавиатуры.

/market/infinite

Ссылка после открытия

В карточке нет прямой ссылки. «Подробнее» открывает окно, в ответе на отдельный запрос появляется переход к товару.

/market/reveal

Проверка качества данных

Специальная витрина с отсутствующей ценой, повтором артикула, отрицательным остатком и пустым названием.

/market/quality

Карточка товара

Пять фотографий, переключение ракурсов и вариантов, характеристики и подробности ухода.

/market/1

Проверить четыре ошибки

В обычном каталоге данные корректны. На странице проверки качества четыре контрольные карточки видны сразу; ссылки ниже открывают те же ошибочные данные отдельно.

История цены и валюта

Учебный период — август 2026 года: у товара 1 есть 31 наблюдение, у товара 2 — два, у товара 3 наблюдений нет. Валюта в шапке меняет отображение по фиксированному учебному курсу; исходное поле price в API остаётся в рублях.

Повторяемые условия

Сценарий изменения данных повышает цену на 290 ₽ и уменьшает остаток на 8 у каждого седьмого товара. Сброс возвращает исходные значения.

Границы учебного примера

В магазине нет авторизации, оплаты и оформления заказов. Избранное существует только до обновления страницы. Фотографии показывают 16 видов товаров; у каждого вида 625 моделей с общей галереей из обложки и четырёх интерьерных ракурсов. Авторы и тексты отзывов вымышлены.

Практика на своём темпе

20 задач для самостоятельной работы

Выберите задачу, соберите данные и сравните результат с самопроверкой. Начните с небольшой выборки. Все товары, авторы отзывов, цены и курсы здесь учебные. Кнопка откроет Акмело; упражнение не запускается автоматически.

Задание 01

Первый прайс из HTML

Получить шесть основных полей без запуска браузера.

Страница сбора: /market

Поля, действия и самопроверка

Поля: product_id sku name price stock url

  1. Прочитать исходный HTML первой страницы.
  2. Извлечь карточки и разрешить относительные ссылки относительно магазина.

Ожидаемый результат: 24 записи первой страницы, уникальные product_id от 1 до 24.

Самопроверка: Сверить ID 1: LD-00001,4660 RUB, остаток 17. Цена — число, ссылка — полный URL.

Решить в Акмело — задание 01, в новой вкладке

Задание 02

Три страницы через page

Научиться следовать пагинации в query-параметре.

Страница сбора: /market?page=1

Поля, действия и самопроверка

Поля: product_id sku name price stock url

  1. Перейти по rel=next с первой на вторую и третью страницы.
  2. Остановить учебный обход после трёх страниц, сохранить посещённые ссылки.

Ожидаемый результат: 72 разных товара, по 24 с каждой страницы.

Самопроверка: ID не повторяются; min=1, max=72. Ограничение пробы не выдаётся за конец каталога.

Решить в Акмело — задание 02, в новой вкладке

Задание 03

Номер страницы в пути

Пройти обычные ссылки с номером внутри маршрута.

Страница сбора: /market/page/1

Поля, действия и самопроверка

Поля: product_id sku url

  1. Следовать фактическому rel=next на /market/page/2 и /market/page/3.
  2. Не заменять этот маршрут query-пагинацией.

Ожидаемый результат: 72 уникальных ID и настоящие полные ссылки товаров.

Самопроверка: Адрес каждой страницы содержит /market/page/N; записи не потеряны и не продублированы.

Решить в Акмело — задание 03, в новой вкладке

Задание 04

Весь каталог

Собрать все товары, контролируя полноту.

Страница сбора: /market

Поля, действия и самопроверка

Поля: product_id sku name price stock url

  1. Пройти все страницы без фильтров до отсутствия следующей.
  2. Ограничивать частоту, проверять повторные ID и прогресс; собирать текстовые поля без обязательного скачивания всех фото.

Ожидаемый результат: 10 000 уникальных ID;417 страниц по 24, последняя — 16.

Самопроверка: Множество ID равно 1…10000. Выборка 1/7/10000 совпадает с источником; нет пропусков и повторов.

Решить в Акмело — задание 04, в новой вкладке

Задание 05

Категория и сортировка

Собрать только освещение по возрастанию цены.

Страница сбора: /market?category=lighting&sort=price-asc

Поля, действия и самопроверка

Поля: product_id category price url

  1. Сохранить category=lighting и sort=price-asc во всех переходах.
  2. Пройти все страницы отфильтрованной выдачи.

Ожидаемый результат: 1250 товаров категории lighting в выбранном порядке.

Самопроверка: Все category равны lighting; цена не убывает между соседними строками, включая границы страниц.

Решить в Акмело — задание 05, в новой вкладке

Задание 06

Один товар по артикулу

Проверить поиск без случайного широкого охвата.

Страница сбора: /market?q=LD-00001

Поля, действия и самопроверка

Поля: product_id sku name price url

  1. Применить поиск по LD-00001.
  2. Получить фактическую ссылку и сверить карточку.

Ожидаемый результат: Одна базовая запись ID 1, SKU LD-00001.

Самопроверка: Не собраны соседние карточки или исполнение Графит вместо default; найдено ровно одно совпадение.

Решить в Акмело — задание 06, в новой вкладке

Задание 07

Только в наличии

Собрать доступные товары и проверить фильтр.

Страница сбора: /market?inStock=1

Поля, действия и самопроверка

Поля: product_id sku stock price url

  1. Пройти отфильтрованные страницы с inStock=1.
  2. Сохранить объявленное источником total для сравнения с результатом.

Ожидаемый результат: Каждая сохранённая запись имеет stock>0; количество равно total этой выборки.

Самопроверка: Нулевых и отрицательных остатков нет. Не использовать общее 10000 как количество отфильтрованных товаров.

Решить в Акмело — задание 07, в новой вкладке

Задание 08

Каталог только на JavaScript

Отличить пустой серверный HTML от готовой страницы.

Страница сбора: /market/js

Поля, действия и самопроверка

Поля: product_id sku name price stock url

  1. Сравнить исходный HTTP-ответ с DOM после выполнения JavaScript.
  2. В браузере дождаться карточек первой порции, затем извлечь их.

Ожидаемый результат: 24 товара после реальной загрузки; в исходной сетке HTML карточек нет.

Самопроверка: Первый ID 1, последний 24. Тайм-аут загрузки не считается успешным пустым результатом.

Решить в Акмело — задание 08, в новой вкладке

Задание 09

Следующая страница без нового URL

Пройти три заменяющиеся порции по кнопке.

Страница сбора: /market/next

Поля, действия и самопроверка

Поля: product_id sku price stock url

  1. Сохранить первую порцию до перехода.
  2. Дважды нажать Следующая страница с ожиданием новых ID; не подставлять page в URL.

Ожидаемый результат: 72 уникальных товара; URL не изменился, сетка содержит текущую порцию.

Самопроверка: После каждой загрузки новые 24 ID; первые данные не потеряны при замене DOM.

Решить в Акмело — задание 09, в новой вкладке

Задание 10

Показать ещё без дублей

Обрабатывать добавленные карточки один раз.

Страница сбора: /market/more

Поля, действия и самопроверка

Поля: product_id sku price url

  1. Нажать Показать ещё дважды с ожиданием завершения.
  2. Отсекать уже встреченные ID или читать только новые узлы.

Ожидаемый результат: В DOM72 карточки и в результате 72 уникальных товара.

Самопроверка: Не получить 24+48+72=144 записи повторным чтением всех узлов. URL остаётся прежним.

Решить в Акмело — задание 10, в новой вкладке

Задание 11

Бесконечная прокрутка

Проверять подгрузку по появлению новых данных.

Страница сбора: /market/infinite

Поля, действия и самопроверка

Поля: product_id sku price url

  1. Прокрутить к подгрузке или использовать доступную резервную кнопку.
  2. Ограничить практику тремя порциями; после каждого действия дождаться роста множества ID.

Ожидаемый результат: 72 уникальных товара после двух подгрузок.

Самопроверка: Учебное ограничение трёх порций отличается от настоящего конца списка; задержка сети не маскируется успехом.

Решить в Акмело — задание 11, в новой вкладке

Задание 12

Ссылка только после действия

Получить URL через Подробнее, а не угадать его.

Страница сбора: /market/reveal

Поля, действия и самопроверка

Поля: product_id sku url

  1. Для первых 8 товаров открыть Подробнее и дождаться диалога нужного ID.
  2. Прочитать появившийся href, закрыть диалог; соблюдать лимит вызовов среды.

Ожидаемый результат: Восемь соответствий ID→URL, полученных реальным раскрытием.

Самопроверка: До клика в карточке нет прямого href. ID диалога совпадает с карточкой; старый URL не переиспользован.

Решить в Акмело — задание 12, в новой вкладке

Задание 13

Пять фото, а не десять миниатюр

Извлечь упорядоченные галереи трёх моделей.

Страница сбора: /market/1

Поля, действия и самопроверка

Поля: product_id main_image gallery

  1. Проверить ID 1,17,2 в default.
  2. Взять пять gallery[*].url из деталей или пять SSR-слайдов, исключив миниатюры; передать массив URL-строк.

Ожидаемый результат: Три записи по пять фото:15 вхождений и 10 уникальных исходных изображений.

Самопроверка: image.url совпал с gallery[0].url. ID 1 и 17 делят галерею семейства; фото авторов отзывов не попали в неё.

Решить в Акмело — задание 13, в новой вкладке

Задание 14

Два исполнения — две строки

Сохранить варианты без перезаписи друг друга.

Страница сбора: /market/1

Поля, действия и самопроверка

Поля: product_id variant sku model color price gallery

  1. Считать default, затем выбрать Графит и дождаться всех обновлений.
  2. Использовать составной ключ product_id+variant для двух отдельных строк.

Ожидаемый результат: Две записи одного ID: LD-00001/4660 RUB и LD-00001-GR/5050 RUB.

Самопроверка: URL и ID прежние, но SKU, модель, цвет, пять фото и документы относятся к своему исполнению.

Решить в Акмело — задание 14, в новой вкладке

Задание 15

Характеристики после Подробнее

Получить параметры, которых нет в исходном коротком блоке.

Страница сбора: /market/1

Поля, действия и самопроверка

Поля: product_id variant country country_code specifications

  1. Сохранить шесть базовых SSR-ключей.
  2. Нажать Подробнее в характеристиках, дождаться fetch /api/products/{id}/specifications для текущего variant; объединить по key без дублей.

Ожидаемый результат: Полный список specs совпадает с ответом API; страна и код сохранены отдельно.

Самопроверка: Дополнительный контейнер до fetch пуст. Числа и boolean не превращены в строки; старый ответ другого variant не смешан с новым.

Решить в Акмело — задание 15, в новой вкладке

Задание 16

Учебные отзывы отдельной таблицей

Получить авторов, оценки и тексты без смешения с товарными фото.

Страница сбора: /market/1

Поля, действия и самопроверка

Поля: product_id review_id author_id author_name author_age avatar_url rating date title text

  1. В исходном HTML карточки прочитать 4 отзыва; нажать кнопку загрузки остальных и дождаться ещё 6 через /api/products/1/reviews?offset=4&limit=6. Альтернатива: получить все 10 запросом /api/products/1/reviews без параметров.
  2. Объединить исходные и загруженные отзывы по review_id без повторов; сверить количество и оценки со сводкой. Хранить отдельную строку на отзыв.

Ожидаемый результат: 4 отзыва из HTML плюс 6 после клика: всего 10 отзывов и 10 вымышленных авторов. API без параметров возвращает все 10 сразу.

Самопроверка: До клика в DOM 4 отзыва, после — 10 уникальных review_id; оценки 1…5, сводка учитывает все 10. Повторный клик не создаёт дубли. Фото author.avatar не входят в gallery; все авторы и отзывы учебные.

Решить в Акмело — задание 16, в новой вкладке

Задание 17

История с 31,2 и 0 точек

Корректно обрабатывать плотную, редкую и отсутствующую историю.

Страница сбора: /market/1

Поля, действия и самопроверка

Поля: product_id variant date price currency

  1. Запросить август 2026 для ID 1,2,3 через /api/products/{id}/price-history.
  2. Сохранить точки с датой и валютой; отдельно отметить отсутствие наблюдений.

Ожидаемый результат: ID 1 — 31 ежедневная точка; ID 2 — 2 точки; ID 3 — 0 точек.

Самопроверка: Даты только 01…31 августа 2026 по порядку. Пустая история не превращается в точку с нулевой ценой.

Решить в Акмело — задание 17, в новой вкладке

Задание 18

Четыре учебные валюты

Сохранять цену вместе с её валютой.

Страница сбора: /market/1?currency=USD

Поля, действия и самопроверка

Поля: product_id variant price_rub display_price currency

  1. Считать ID 1 default в RUB, USD, EUR, CNY.
  2. В API различать базовый price в RUB и конвертированный displayPrice; использовать фиксированные учебные коэффициенты.

Ожидаемый результат: Для 4660 RUB:46,60 USD;42,36 EUR;332,86 CNY.

Самопроверка: Коэффициенты:1 USD=100 RUB,1 EUR=110 RUB,1 CNY=14 RUB. Это синтетические значения, не актуальный курс.

Решить в Акмело — задание 18, в новой вкладке

Задание 19

Четыре ошибки качества

Сохранить дефекты и объяснить их, а не скрыть.

Страница сбора: /market/quality

Поля, действия и самопроверка

Поля: product_id sku name price stock url

  1. Пройти первые 4 страницы: они включают ID 37, 53, 54, 71, 88. Считать только #product-grid .product-card: четыре контрольные карточки над сеткой не добавлять повторно.
  2. Для этой отдельной практики разрешить пустые name/price, отрицательный stock, использовать product_id как ключ; проверять пропуски отдельно от диапазона и дубля.

Ожидаемый результат: 96 записей, среди них 37:price=null;88: пустое name;71:stock=-3;53/54: одинаковый SKU.

Самопроверка: 53 и 54 остались разными строками. При required-полях получится 94 сохранённых/2 отклонённых — это другой ожидаемый результат готового quality-ready.

Решить в Акмело — задание 19, в новой вкладке

Задание 20

Паспорта и инструкции двух исполнений

Скачать и проверить содержание документов товара.

Страница сбора: /market/1

Поля, действия и самопроверка

Поля: product_id variant sku country document_format document_url

  1. Скачать PDF, XLSX, DOCX для default, затем для graphite.
  2. Проверить MIME, открытие и страну/SKU/модель внутри каждого файла; ссылки разрешать относительно магазина.

Ожидаемый результат: Шесть читаемых файлов: паспорт PDF, подробные параметры Excel, инструкция и уход Word для двух исполнений.

Самопроверка: Default содержит LD-00001/4660, Графит — LD-00001-GR/5050. Ссылка сама по себе не доказывает чтение файла; парсинг требует отдельного алгоритма.

Решить в Акмело — задание 20, в новой вкладке