Один из самых частых запросов от пользователей OpenClaw: «как сделать навык, который сам ходит по Wildberries и Ozon, собирает цены и пишет мне в Telegram, если что-то изменилось». В этом туториале — с нуля до рабочего навыка: от выбора инструмента до cron-расписания.
Что получится в итоге
Telegram → 12:00 ежедневно:
─────────────────────────
📉 iPhone 16 Pro 256GB
Wildberries: 89 990 ₽ (было 94 990 ₽, -5.3%)
Ozon: 92 500 ₽ (без изменений)
📈 Утюг Tefal FV9844
Wildberries: 7 890 ₽ (было 6 990 ₽, +12.9%)
Ozon: 7 200 ₽ (без изменений)
Всего отслеживается: 24 товара
Архитектура
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ products.json│ → │ scraper-skill│ → │ prices.db │
│ (список SKU) │ │ (Playwright) │ │ (SQLite) │
└──────────────┘ └──────────────┘ └──────────────┘
↓
┌──────────────┐
│ analyzer + │
│ Telegram bot │
└──────────────┘
3 файла, 1 БД, 1 cron-таймер. Поехали.
Шаг 1. Подготовка проекта
mkdir ~/price-monitor && cd ~/price-monitor
mkdir skills/price-scraper
products.json — список товаров:
[
{
"name": "iPhone 16 Pro 256GB",
"wb_url": "https://www.wildberries.ru/catalog/258912345/detail.aspx",
"ozon_url": "https://www.ozon.ru/product/iphone-16-pro-256gb-987654321/"
},
{
"name": "Утюг Tefal FV9844",
"wb_url": "https://www.wildberries.ru/catalog/123987456/detail.aspx",
"ozon_url": "https://www.ozon.ru/product/utyug-tefal-fv9844-654987321/"
}
]
Шаг 2. Подключение Playwright MCP
В .openclaw/mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}
Перезапустите OpenClaw, проверьте: openclaw mcp list — должен появиться playwright со статусом connected. Подробнее — подключение MCP.
Шаг 3. Скилл price-scraper
skills/price-scraper/SKILL.md:
---
name: price-scraper
description: |
Извлекает текущую цену товара со страницы Wildberries или Ozon.
Используй, когда нужно проверить актуальную цену по URL.
inputs:
url: string — полный URL страницы товара
outputs:
price: number — цена в рублях
available: boolean — есть ли в наличии
snapshot_time: string — ISO timestamp
---
# Алгоритм
1. Открой URL через playwright `browser_navigate`.
2. Дождись загрузки (wait_for_selector — для WB: `.price-block__final-price`, для Ozon: `[data-widget="webPrice"]`).
3. Извлеки текст цены, очисти от пробелов и валюты, преобразуй в number.
4. Проверь наличие кнопки "Купить" / "Добавить в корзину" → available.
5. Верни структуру `{ price, available, snapshot_time }`.
# Anti-bot замечания
- WB иногда показывает капчу. При обнаружении капчи — вернуть `{ error: "captcha" }`, не пытаться обходить.
- Ozon регионзависим — установить cookie `__Secure-ETC` для Москвы.
- При rate-limit > 5 req/min — добавь sleep 3–5 сек между запросами.
Если стандартный Playwright блокируется — переключись на `scrapling` MCP (см. /integratsii/openclaw-mcp-server-kak-podklyuchit/).
Подробнее про создание навыков — гайд по skills.
Шаг 4. Скилл price-analyzer
skills/price-analyzer/SKILL.md:
---
name: price-analyzer
description: |
Сравнивает текущие цены с историей в SQLite и формирует отчёт
об изменениях больше N%.
inputs:
threshold_pct: number — порог изменения, например 3
outputs:
report: string — текст для отправки в Telegram
---
# Алгоритм
1. Открой ./prices.db (SQLite). Таблица prices(product, source, price, ts).
2. Для каждого товара из products.json:
- Возьми последние 2 записи по каждому источнику
- Если |delta| >= threshold_pct% → добавь в отчёт
3. Сформируй Markdown-отчёт с эмодзи 📈/📉.
4. Если нет изменений — верни `Без изменений за сутки.`
Шаг 5. Главный workflow-скилл
skills/daily-price-check/SKILL.md:
---
name: daily-price-check
description: |
Ежедневный скан всех товаров из products.json,
запись в БД, отчёт в Telegram при изменениях.
---
# Алгоритм
1. Прочитай products.json.
2. Для каждого товара:
- Вызови price-scraper для wb_url → сохрани в prices.db
- Вызови price-scraper для ozon_url → сохрани в prices.db
- sleep 4 сек
3. Вызови price-analyzer с threshold_pct=3.
4. Если report не "Без изменений" → отправь в Telegram через telegram-send скилл.
5. Запиши лог выполнения в logs/YYYY-MM-DD.log.
Шаг 6. Запуск вручную
openclaw run skill daily-price-check
Агент пройдёт цепочку, заполнит БД, при необходимости отправит уведомление. Проверьте prices.db:
sqlite3 prices.db "SELECT * FROM prices ORDER BY ts DESC LIMIT 10"
Шаг 7. Cron-расписание
Через встроенный механизм cron-jobs OpenClaw:
openclaw cron add \
--name "daily-price-check" \
--schedule "0 12 * * *" \
--skill daily-price-check
Каждый день в 12:00 — автоматический скан и отчёт. Подробнее — cron-jobs в OpenClaw.
Шаг 8. Защита от блокировок
Маркетплейсы активно борются со скрейпингом. Меры:
- Не более 1 запроса в 5 секунд на один источник.
- Резидентский прокси (если нужно более 100 товаров).
- Ротация user-agent (Playwright делает автоматически).
- При капче — не обходить, остановить скрейп и подождать сутки.
- Соблюдайте robots.txt и условия использования платформ.
Если Playwright стабильно блокируется — переключитесь на Scrapling MCP — он лучше обходит fingerprint-защиты.
Что улучшить дальше
- График цен — генерация PNG через matplotlib раз в неделю.
- Поиск лучшей цены среди нескольких маркетплейсов с автопокупкой при достижении порога.
- Sentiment отзывов — параллельно отслеживать изменения рейтинга и количество отзывов.
- Webhook на изменение — сразу отправлять, а не ждать суточного отчёта.