Skip to content

Watcher v3.0: Тестовая сборка — Быстрый сканер каталога продавца

Цель

Проверить работоспособность связки Claude Code CLI + agent-browser для сбора ассортимента конкурента на Wildberries. Агент получает ID продавца, пролистывает каталог и собирает данные со всех карточек-превью. Особый акцент на реалистичную эмуляцию поведения человека.

Требования

КомпонентТребование
ОСWindows 10 (build 1809+)
RAM8 GB (минимум)
ПодпискаClaude Max 5x
БраузерGoogle Chrome (менеджер авторизован на WB)
УстановленоClaude Code CLI, agent-browser

Шаг 1: Подготовка рабочей директории

powershell
mkdir -Force C:\watcher-test-seller
cd C:\watcher-test-seller

1.1 Тестовые продавцы

Создать файл test_sellers.json:

json
{
  "marketplace": "wildberries",
  "sellers": [
    {"id": "1025130", "name": "Тестовый продавец"}
  ]
}

{/* Замените ID на реального конкурента. Для теста достаточно одного продавца. */}

1.2 Файл инструкций CLAUDE.md

Создать файл CLAUDE.md в корне проекта:

markdown
# Watcher Agent — Быстрый сканер каталога продавца

## Роль

Ты — агент разведки ассортимента. Твоя задача: открыть страницу продавца
на Wildberries, пролистать весь каталог и собрать данные со всех
карточек-превью. Твоё поведение должно быть неотличимо от реального
менеджера, который изучает ассортимент конкурента.

## Инструменты

Используй `agent-browser` для управления браузером.
Подключайся к Chrome через CDP: `agent-browser --cdp 9222`.

---

## Алгоритм работы

### Фаза 1: Инициализация

1. Прочитай файл test_sellers.json — получи список продавцов.
2. Подключись к Chrome через CDP: `agent-browser --cdp 9222 open about:blank`
3. Проверь подключение: `agent-browser get title`
4. Установи случайный viewport (отклонение ±10-20px от базового):
   `agent-browser set viewport <1900-1940> <1060-1100>`

### Фаза 2: Калибровка

1. Открой страницу первого продавца: https://www.wildberries.ru/seller/{id}
2. Дождись полной загрузки.
3. Выполни `agent-browser snapshot -i` на странице каталога.
4. Проанализируй snapshot — определи:
   - Структуру карточки-превью (какие данные видны: SKU, название, цена,
     старая цена, рейтинг, количество отзывов, скидка, бейджи).
   - Механизм пагинации (кнопка "Показать ещё", номера страниц,
     бесконечный скролл).
   - Общее количество товаров продавца (если отображается).
   - Refs для кнопок: избранное (сердечко), корзина, фильтры, сортировка.
   - Refs для элементов хедера: поиск, профиль, корзина, уведомления.
5. Сформируй схему извлечения данных из карточек-превью.
6. Определи метод пагинации.
7. Рассчитай коэффициент усталости на основе общего количества товаров.

**После калибровки LLM больше не используется.**
Далее все действия выполняются детерминированно по сгенерированному сценарию.
При ошибках извлечения — подключить LLM точечно.

---

### Фаза 3: Эмуляция и сбор данных

#### 3.1 Коэффициент усталости

Все паузы умножаются на коэффициент в зависимости от прогресса:

| Прогресс | Множитель | Описание |
|----------|-----------|----------|
| 0-30% товаров | ×1.0 | Бодрый старт |
| 30-70% товаров | ×1.3 | Замедление |
| 70-100% товаров | ×1.6 | Усталость |

#### 3.2 Движение мыши

Все перемещения мыши выполняются реалистично:

- **Кривые Безье:** Не двигать мышь по прямой. Генерировать 3-5 промежуточных
  точек с отклонением от прямой линии на 20-80px. Выполнять серию
  `agent-browser mouse move x y` с паузами 10-30 мс между точками.
- **Overshoot:** В 20% случаев проехать мимо цели на 10-30px, пауза 100-200 мс,
  вернуться к цели.
- **Дрожание:** При наведении на элемент — 2-3 микродвижения ±3-5px.
- **Смещение клика:** Кликать не в центр элемента, а со случайным
  смещением ±5-15px.
- **Микропауза:** Перед каждым кликом — пауза 200-500 мс (прицеливание).

#### 3.3 Скролл

- **Плавный скролл:** Порциями по 100-300px через `agent-browser mouse wheel`.
  Пауза 100-400 мс между порциями.
- **Случайная глубина:** Скролл вниз на 50-90% видимой области.
- **Возврат вверх:** В 30% случаев после скролла вниз — частичный возврат вверх
  (как будто вернулся проверить что-то).
- **Разброс:** Конечная точка скролла ±50px от целевой.
- **Двойной скролл:** В 10% случаев — быстрый скролл вниз →
  пауза 1-2 сек → медленный возврат вверх.

#### 3.4 Извлечение данных с текущей страницы

1. Выполнить эмуляцию просмотра страницы (скролл, hover на карточки).
2. Выполнить `agent-browser snapshot` для получения всех элементов.
3. Извлечь данные из каждой карточки-превью:
   - sku (артикул)
   - name (название)
   - price (текущая цена)
   - old_price (старая цена, если есть)
   - discount (скидка, если отображается)
   - rating (рейтинг, если виден)
   - reviews_count (количество отзывов, если видно)
   - image_url (URL первого фото, если доступен)
   - любые другие видимые данные (бейджи, промо-метки)
4. Добавить извлечённые товары в общий массив (дедупликация по SKU).

#### 3.5 Пагинация

1. После извлечения данных — перейти к следующей странице.
2. Использовать метод, определённый в Фазе 2:
   - **Кнопка "Показать ещё"** → навести мышь (Безье) → пауза → кликнуть.
   - **Номера страниц** → навести на следующий номер → кликнуть.
   - **Бесконечный скролл** → прокрутить вниз до подгрузки.
3. Пауза между страницами пагинации: **20-40 секунд** (× коэффициент усталости).
4. После загрузки новой порции — эмуляция просмотра → извлечение данных.
5. Повторять пока не закончатся страницы.

---

### Фаза 4: Отвлечения

Между основными действиями по сбору данных выполняются случайные
отвлечения. Частота каждого типа — случайное число в указанном диапазоне.

#### 4.1 Корзина

Частота: раз в **15-30 товаров**.

1. Навести мышь на кнопку "В корзину" случайного товара (Безье).
2. Пауза 300-600 мс.
3. Кликнуть (со смещением ±10px).
4. Подождать 2-4 сек.
5. Навести мышь на иконку корзины в хедере → кликнуть.
6. Подождать 3-5 сек (просмотр корзины).
7. В 50% случаев — изменить количество товара (+/−) → подождать 2-3 сек.
8. Удалить товар из корзины.
9. Подождать 2-3 сек.
10. Вернуться на страницу продавца (назад в браузере).

#### 4.2 Избранное

Частота: раз в **8-15 товаров**.

Вариант A — лайк из каталога (70% случаев):
1. Навести мышь на сердечко случайной карточки.
2. Кликнуть.
3. Подождать 1-2 сек.

Вариант B — просмотр раздела Избранное (30% случаев):
1. Навести на иконку Избранное в хедере → кликнуть.
2. Подождать 3-5 сек (просмотр).
3. Если есть товары — удалить 1-2 случайных.
4. Вернуться на страницу продавца.

#### 4.3 Просмотр карточки товара

Частота: раз в **3-8 товаров**.

1. Навести мышь на случайную карточку в каталоге (Безье).
2. Hover 2-4 сек (рассматривание).
3. Кликнуть → перейти на карточку товара.
4. На карточке выполнить случайную комбинацию (2-4 действия из списка):
   - Пролистать 2-4 фото в галерее (клик по стрелке или миниатюрам).
   - Раскрыть блок "Характеристики" → прокрутить.
   - Раскрыть блок "Описание" → пауза 3-5 сек (чтение).
   - Прокрутить до отзывов → прочитать 1-2 (пауза 5-10 сек).
   - Посмотреть блок "Похожие товары" внизу → hover на 1-2 товара.
   - Выбрать случайный размер / цвет (если есть селектор).
   - Лайкнуть товар (сердечко на карточке).
5. Подождать 3-7 сек.
6. Вернуться назад в каталог продавца.

Время на отвлечение: **20-45 секунд** (× коэффициент усталости).

#### 4.4 Hover без клика

Частота: раз в **2-4 товара**.

1. Навести мышь на случайную карточку (Безье).
2. Hover 3-7 сек (рассматривание).
3. Медленно увести мышь в сторону.

#### 4.5 Поисковая строка

Частота: раз в **20-35 товаров**.

Вариант A — поиск с результатами (60% случаев):
1. Навести мышь на строку поиска → кликнуть.
2. Ввести случайный запрос посимвольно (50-150 мс между символами).
   Запрос — категория товаров продавца (например, "худи женское").
3. Нажать Enter.
4. Подождать 3-5 сек (просмотр результатов).
5. Прокрутить результаты вниз.
6. Подождать 2-4 сек.
7. Вернуться на страницу продавца (назад или по прямой ссылке).

Вариант B — начать и передумать (40% случаев):
1. Кликнуть на строку поиска.
2. Ввести 2-4 символа (50-150 мс между символами).
3. Пауза 1-3 сек.
4. Стереть текст (Backspace или Ctrl+A → Delete).
5. Кликнуть в область каталога (закрыть поиск).

#### 4.6 Навигация по WB

Частота: раз в **25-40 товаров**.

Случайный выбор одного из действий:

**Главная страница:**
1. Кликнуть на логотип WB.
2. Прокрутить главную вниз (30-60% страницы).
3. Hover на 1-2 баннера/акции.
4. Подождать 5-10 сек.
5. Вернуться на страницу продавца (назад).

**Категория из меню:**
1. Навести мышь на меню категорий.
2. Подождать 1-2 сек (раскрытие меню).
3. Кликнуть на случайную категорию.
4. Подождать 3-5 сек (просмотр).
5. Вернуться назад.

**Мои заказы:**
1. Навести на иконку профиля в хедере.
2. Кликнуть "Мои заказы" (или аналог).
3. Подождать 3-5 сек.
4. Вернуться назад.

**Уведомления:**
1. Кликнуть на иконку колокольчика в хедере.
2. Подождать 2-4 сек.
3. Закрыть / вернуться.

**Акции/промо:**
1. Кликнуть на баннер акции (если виден на странице продавца или хедере).
2. Прокрутить страницу акции.
3. Подождать 3-5 сек.
4. Вернуться назад.

Время на отвлечение: **30-60 секунд** (× коэффициент усталости).

#### 4.7 Фильтры и сортировка

Частота: раз в **10-20 товаров**.

Вариант A — сортировка (50% случаев):
1. Найти элемент сортировки на странице каталога.
2. Кликнуть → выбрать случайный вариант (по цене ↑, по рейтингу, по новизне).
3. Подождать 3-5 сек (перезагрузка каталога).
4. Прокрутить 2-3 карточки.
5. Вернуть сортировку по умолчанию.
6. Подождать 3-5 сек.

Вариант B — фильтр по цене (30% случаев):
1. Найти фильтр по цене.
2. Установить случайный диапазон.
3. Подождать 3-5 сек (перезагрузка).
4. Сбросить фильтр.
5. Подождать 3-5 сек.

Вариант C — переключение вида (20% случаев):
1. Найти переключатель вида (сетка/список, если есть).
2. Переключить.
3. Подождать 2-3 сек.
4. Вернуть обратно.

#### 4.8 Микроповедение

Эти действия происходят постоянно, вплетаются между основными:

**Выделение текста** (раз в 10-25 товаров):
1. Навести мышь на название случайного товара.
2. Зажать кнопку мыши (`agent-browser mouse down`).
3. Провести мышь вправо (выделение текста).
4. Отпустить (`agent-browser mouse up`).
5. Пауза 1-3 сек.
6. Кликнуть в пустое место (снять выделение).

**Правый клик → отмена** (раз в 30-50 товаров):
1. Навести мышь на случайный элемент.
2. Правый клик (`agent-browser mouse down right`).
3. Пауза 500 мс.
4. Нажать Escape (`agent-browser press Escape`).

**Случайный мисклик** (раз в 25-40 товаров):
1. Двойной клик по случайному элементу (не кнопке).
2. Пауза 500 мс.
3. Продолжить нормально.

**Фокус/расфокус окна** (раз в 8-15 товаров):
1. Симулировать потерю фокуса окна (Tab-переключение).
2. Пауза 5-15 сек (имитация другого приложения).
3. Вернуть фокус.

**Длинная пауза** (раз в 15-30 товаров):
1. Полная остановка всех действий.
2. Пауза **60-180 секунд** (× коэффициент усталости).
3. Имитация: человек отвлёкся на телефон, разговор, кофе.

#### 4.9 Переключение вкладок и эмуляция других приложений

Эти действия создают реалистичную мультизадачность.

**Открытие новых вкладок** (раз в 12-25 товаров):
1. Открыть новую вкладку (`Ctrl+T`).
2. Перейти на случайный сайт:
   - ozon.ru (главная → скролл → закрыть)
   - yandex.ru (поиск случайного запроса → просмотр → закрыть)
   - news-сайт (rbc.ru, vc.ru → прокрутить → закрыть)
   - mail-сервис (mail.ru или gmail.com — просто открыть → закрыть)
   - youtube.com (открыть → пауза 5-10 сек → закрыть)
3. Провести на вкладке 10-30 сек.
4. Закрыть вкладку (`Ctrl+W`).
5. Вернуться на вкладку с каталогом продавца.

**Переключение между вкладками** (раз в 5-10 товаров):
1. Если есть открытые вкладки — переключиться на случайную (`Ctrl+Tab`).
2. Пауза 3-8 сек.
3. Вернуться на вкладку каталога (`Ctrl+Shift+Tab` или клик).

**Эмуляция работы в другом приложении** (раз в 20-40 товаров):
1. Потеря фокуса окна Chrome.
2. Пауза **30-90 секунд** (× коэффициент усталости).
   Имитация: менеджер переключился в 1С, Excel, Telegram, почту.
3. Вернуть фокус на Chrome.
4. Пауза 2-3 сек (переориентация).
5. Продолжить работу.

**Случайное открытие Ozon/YM для сравнения** (раз в 30-50 товаров):
1. Открыть новую вкладку.
2. Перейти на ozon.ru или market.yandex.ru.
3. Ввести в поиск название товара, на котором остановились (или категорию).
4. Просмотреть результаты 10-20 сек.
5. Закрыть вкладку.
6. Вернуться к каталогу продавца на WB.

---

### Фаза 5: Сохранение

1. Записать все результаты в файл `results_seller_{id}.json`.
2. Вывести краткую сводку:
   - ID и имя продавца.
   - Общее количество собранных товаров.
   - Диапазон цен (мин — макс).
   - Средний рейтинг (если доступен).
   - Количество страниц пагинации.
   - Время сканирования.
   - Количество ошибок.
3. Закрыть вкладку (не браузер).

### Обработка ошибок

- **Пагинация сломалась** (нет кнопки, страница не грузится) —
  сохранить собранные данные и завершиться.
- **CAPTCHA** — попробовать решить. Не удалось → подождать 5 минут →
  повтор. Снова неудачно → сохранить собранное и завершиться.
- **Таймаут загрузки** — подождать 10 секунд, обновить страницу,
  попробовать ещё раз.
- **Элемент не найден** (при отвлечении) — пропустить действие,
  продолжить нормально. Не останавливаться.

## Формат результата (results_seller_\{id\}.json)

```json
{
  "seller_id": "1025130",
  "seller_name": "Название продавца",
  "marketplace": "wildberries",
  "scan_date": "2026-02-09T15:30:00Z",
  "scan_duration_minutes": 95,
  "total_products": 142,
  "products": [
    {
      "sku": "12345678",
      "name": "Худи оверсайз женское",
      "price": 2150,
      "old_price": 4300,
      "discount": 50,
      "rating": 4.8,
      "reviews_count": 256,
      "image_url": "https://...",
      "badges": ["Бестселлер"],
      "url": "https://www.wildberries.ru/catalog/12345678/detail.aspx"
    }
  ],
  "summary": {
    "price_min": 590,
    "price_max": 8900,
    "avg_rating": 4.6,
    "total_collected": 142,
    "pages_scanned": 5,
    "errors": 0
  }
}
```

## Ограничения

- Всегда подключайся к Chrome через `--cdp 9222`.
- Не заходи на отдельные карточки товаров для сбора данных — только через превью.
  Заход на карточку допустим только как элемент эмуляции (отвлечение).
- Соблюдай все паузы и применяй коэффициент усталости.
- При ошибке в эмуляции (элемент не найден) — пропускай и продолжай.
- Дедупликация товаров по SKU обязательна.

Шаг 2: Создать bat-файл

Создать C:\watcher-test-seller\run_seller_scan.bat:

bat
@echo off
cd /d C:\watcher-test-seller

REM === Создать директорию для логов ===
if not exist logs mkdir logs

REM === 1. Принудительно закрыть Chrome ===
taskkill /F /IM chrome.exe >nul 2>&1
timeout /t 5 /nobreak >nul

REM === 2. Запустить Chrome с CDP и профилем менеджера ===
start "" "C:\Program Files\Google\Chrome\Application\chrome.exe" ^
  --remote-debugging-port=9222 ^
  --user-data-dir="%LOCALAPPDATA%\Google\Chrome\User Data" ^
  --profile-directory="Default" ^
  --no-first-run
timeout /t 10 /nobreak >nul

REM === 3. Запустить Claude Code CLI ===
claude --prompt "Прочитай CLAUDE.md и выполни задание. Используй agent-browser с --cdp 9222. Начни с Фазы 1." > logs\%date:~-4%-%date:~3,2%-%date:~0,2%_seller.log 2>&1

REM === 4. Закрыть Chrome после завершения ===
taskkill /F /IM chrome.exe >nul 2>&1

Шаг 3: Запуск

powershell
C:\watcher-test-seller\run_seller_scan.bat

Ожидаемое поведение:

  1. Chrome откроется с профилем менеджера.
  2. Claude подключится через CDP.
  3. Откроет страницу продавца wildberries.ru/seller/1025130.
  4. Проанализирует структуру каталога (1-2 вызова LLM).
  5. Начнёт пролистывать каталог с полной эмуляцией поведения.
  6. Между сбором данных — случайные отвлечения (корзина, избранное, поиск, навигация).
  7. По мере продвижения — замедление (коэффициент усталости).
  8. По завершении — сохранит results_seller_1025130.json.

Ориентировочное время: ~3 часа для продавца с ~200 товарами.

Шаг 4: Проверка результатов

Открыть results_seller_1025130.json и проверить:

КритерийОжидание
Файл созданresults_seller_1025130.json существует
seller_idСовпадает с входным
productsМассив не пустой
ПолнотаКоличество products ≈ реальному количеству товаров продавца
ДедупликацияНет дублей по SKU
ПоляКаждый товар содержит sku, name, price
summaryПрисутствует сводка с min/max и количеством
scan_duration_minutesСоответствует реальному времени

Возможные проблемы

ПроблемаПричинаРешение
Страница продавца не загружаетсяНеверный seller IDПроверить ID в URL вручную
Собрано меньше товаров чем естьПагинация не определенаПроверить лог, уточнить метод пагинации
Дубликаты товаровБесконечный скролл подгружает те же данныеДедупликация по SKU в алгоритме
Пустые ценыТовар "нет в наличии"Нормально — сохранить с пометкой
CDP connection refusedChrome не запущенПроверить netstat -an | findstr 9222
Каталог пустойПродавец скрыл товарыПопробовать другого продавца
Ошибка при отвлеченииЭлемент не найден (фильтр, кнопка)Нормально — агент пропускает и продолжает
Товары в корзине утромАгент не успел удалитьМенеджер удаляет вручную

Что дальше

После успешного теста:

  1. Добавить несколько продавцов в test_sellers.json.
  2. Добавить Ozon и YM (другая структура страницы продавца).
  3. Подключить отправку результатов на сервер через REST API.
  4. Настроить запуск по расписанию через Windows Task Scheduler.

Статистика ночного сеанса

Расчёт для ночного окна 20:00 — 08:00 (12 часов = 720 минут).

Базовое время на 1 товар (без отвлечений)

ДействиеСреднее время
Движение мыши (Безье + overshoot)1.5 сек
Hover на карточке5 сек
Микропауза перед действием0.4 сек
Плавный скролл3 сек
Возврат вверх (30% шанс × 2 сек)0.6 сек
Извлечение данных (snapshot)1.5 сек
Пауза между товарами4.5 сек
Итого на товар~17 сек

Отвлечения на 200 товаров (средние значения)

ТипЧастотаСрабатыванийСреднее времяИтого
Просмотр карточкираз в 3-83632 сек1152 сек
Длинная паузараз в 15-309120 сек1080 сек
Эмуляция другого приложенияраз в 20-40760 сек420 сек
Корзинараз в 15-30940 сек360 сек
Hover без кликараз в 2-4675 сек335 сек
Навигация WBраз в 25-40645 сек270 сек
Открытие новых вкладокраз в 12-251120 сек220 сек
Фокус/расфокусраз в 8-151710 сек170 сек
Фильтры/сортировкараз в 10-201312 сек156 сек
Переключение вкладокраз в 5-10275 сек135 сек
Поискраз в 20-35715 сек105 сек
Избранноераз в 8-15176 сек102 сек
Сравнение на Ozon/YMраз в 30-50515 сек75 сек
Микроповедение (текст, клики)разные223 сек66 сек
Итого отвлечения253~77 мин

Пагинация

~30 товаров на страницу → 7 страниц × 30 сек = ~3.5 мин.

Коэффициент усталости (средневзвешенный)

СегментТоварыМножительЭквивалент
0-30%60×1.060
30-70%80×1.3104
70-100%60×1.696
Средний200×1.3260

Итого на 1 продавца (200 товаров)

КомпонентВремя
Базовый сбор: 200 × 17 сек57 мин
Отвлечения77 мин
Пагинация3.5 мин
Калибровка (Фаза 2, LLM)2 мин
Подытог139.5 мин
× усталость (×1.3)~181 мин
На 1 продавца~3 часа

Пропускная способность за ночь (12 часов)

Размер каталогаВремя на продавцаПродавцов за ночь
50 товаров~48 мин~15
100 товаров~93 мин~7
200 товаров~181 мин~3-4
500 товаров~450 мин~1

Типовой сценарий смешанной нагрузки

ПродавецТоваровВремя
Конкурент A300~270 мин
Конкурент B150~140 мин
Конкурент C100~93 мин
Конкурент D80~76 мин
Конкурент E50~48 мин
Итого680~627 мин (~10.5 ч)
Буфер~1.5 часа

Буфер ~1.5 часа — запас на CAPTCHA, нестабильный интернет, непредвиденные задержки. При меньшем количестве конкурентов буфер увеличивается пропорционально.


Версия: 0.4
Статус: Тестовая инструкция
Дата: Февраль 2026

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