
Корзина ВкусВилл
@vkusvill-cart
Автоматизация корзины на vkusvill.ru через browser-use CLI: поиск товаров, добавление в корзину с правильными количествами (вес vs штуки), установка адреса доставки и получение ссылки на корзину. Применяйте, когда у пользователя уже есть список покупок: «закажи продукты ВкусВилл», «собери корзину ВкусВилл», или хочет превратить план питания в реальный заказ. Включает проверки авторизации и адреса. Не подходит для рецептов и планов питания (cooking/meal-planner) и других маркетплейсов (smart-shopper/marketplace-ru).
Кому подходит «Корзина ВкусВилл»
- Занятым семьям — превратить недельный список покупок в готовую корзину за пару минут вместо ручного поиска каждой позиции.
- Тем, кто планирует питание — связать план из навыка планирования меню с реальным заказом: рецепты → продукты → корзина.
- Всем, кто устал от ручного кликанья — собрать повторяющуюся закупку одним сообщением и отправить ссылку семье.
Что умеет навык
- Поиск и замены — находит товар по запросу, при нуле результатов упрощает запрос и пробует синоним; предлагает ближайший аналог, а не молчит.
- Вес vs штуки — определяет фасовку (кг, шт, упаковка) и использует нужный способ ввода количества, включая React-стейт тяжёлого SPA ВкусВилл.
- Адрес и авторизация — перед добавлением проверяет логин и адрес доставки: без них корзина работает некорректно.
- Ссылка на корзину — возвращает share-ссылку с защитой от обрезки длинных строк.
Как это работает
Навык работает через реальный браузер (навык browser-use): открывает страницы, читает DOM, кликает по карточкам и закрывает всплывающие модалки — как живой пользователь. Для длинных списков включается batch-режим: штучные товары добавляются быстрыми eval-командами без полного дампа страницы, что ускоряет заказ в 3–4 раза. Прогресс пишется в чекпоинт каждые 10 позиций, поэтому сессию можно продолжить после паузы.
Полезные детали
- Тяжёлый SPA — vkusvill.ru грузит 5000+ px, поэтому навык точечно проверяет состояние через
eval, а не делает полныйstateна каждом шаге. - Профиль браузера — с флагом
--profileсессия сохраняется между запусками, и повторный логин не нужен. - Безопасность — агент не вводит пароли и не подтверждает оплату: финал всегда за вами.
Для других площадок пригодится навык умных покупок, а рецепты к заказу соберёт готовка.
Готовы закрыть продуктовую задачу? Дайте список — запустите «Корзину ВкусВилл» прямо сейчас.
Навык сам оформляет и оплачивает заказ?
Нет. Навык добавляет товары в корзину на vkusvill.ru и возвращает ссылку на неё — финальную проверку и оплату вы делаете сами. Логин и пароль агент не вводит: авторизоваться в открывшемся окне нужно один раз вручную.
Как навык понимает весовые товары?
Он отличает весовые позиции (в килограммах) от штучных (шт/упак) и подбирает способ ввода количества: прямой input, React-стейт карточки, клик по спану с весом или кнопки «+»/«−». Если точный вес установить не удалось — добавляет с дефолтным и честно пишет, что нужно поправить вручную.
Что нужно для запуска?
Аккаунт на vkusvill.ru и адрес доставки — без них товары не сохранятся и кнопка «В корзину» может не сработать. Для работы браузера нужен Python и пакет browser-use; навык спросит разрешение перед установкой и ничего не ставит молча.
А если товара нет в наличии?
Навык упрощает запрос, пробует синонимы и ближайший аналог, а если ничего не нашёл — сообщает об этом и предлагает замену, а не добавляет случайную позицию.
Это бесплатно?
Сам навык бесплатный — оплачиваются только токены за работу агента. Заказ оплачивается отдельно на сайте ВкусВилл, как обычно.
Корзина ВкусВилл — browser-use
Автоматизируем добавление товаров в корзину на vkusvill.ru через browser-use CLI. Каждое действие — через реальный браузер: открываем страницы, ищем товары, добавляем в корзину.
Установка browser-use
Для работы навыка нужен browser-use CLI — это Python-пакет, поэтому Python должен быть установлен.
На Windows Python есть не всегда; на macOS/Linux — как правило, есть.
Прежде чем что-либо устанавливать — скажи пользователю и получи подтверждение.
Не устанавливай Python и пакеты молча и по умолчанию не запускай системные установщики
(winget/brew/apt/curl) без явного согласия.
Порядок действий:
- Проверь:
browser-use --version. Если команда есть — навык готов к работе. - Если
browser-useне установлен — объясни пользователю, что нужен Python и пакетbrowser-use, и спроси разрешение установить:pip install browser-use && browser-use install. На Windows при отсутствии Python предложи скачать установщик с python.org (обязательно с галочкой «Add Python to PATH»), затем повторитьpip install. - Если установка не удалась или пользователь отказался — не зацикливайся: честно сообщи, что автоматизация браузера сейчас недоступна, и предложи выполнить задачу вручную по шагам.
Не скрывай от пользователя команды и ошибки.
Требования (после установки)
browser-useCLI установлен и доступен на PATH- Аккаунт на vkusvill.ru (телефон + пароль или авторизация через соцсети)
- Для headed режима: дисплей или X11 forwarding
Проверка перед работой
ВЫПОЛНЯЙ ПЕРЕД КАЖДЫМ СЕАНСОМ. Это предотвращает 90% проблем.
# 1. Закрыть все старые сессии
browser-use close --all
node -e "new Promise(r=>setTimeout(r,1*1000)).then(process.exit)"
# 2. Открыть ВкусВилл в headed режиме
browser-use --headed open https://vkusvill.ru
node -e "new Promise(r=>setTimeout(r,4*1000)).then(process.exit)"
# 3. Проверить состояние страницы
browser-use state
Что проверять в state (баннер cookies, авторизация, адрес, промо-модалки) и как реагировать — в references/01-preflight-address.md; читай его перед началом сессии.
Авторизация
Если пользователь не авторизован, нужно попросить его войти вручную. Автоматизировать вход нельзя — это небезопасно и ненадёжно.
Попроси пользователя:
«Чтобы добавить товары в корзину, нужно войти в аккаунт ВкусВилл. Пожалуйста, авторизуйся в открывшемся окне браузера, а потом напиши "готово".»
Альтернатива — профиль браузера для сохранения сессии:
browser-use --profile "vv" --headed open https://vkusvill.ru
При первом запуске пользователь авторизуется. При последующих — сессия сохраняется.
Проверка после авторизации пользователем:
browser-use state
# Подождать и проверить снова
node -e "new Promise(r=>setTimeout(r,3*1000)).then(process.exit)"
browser-use eval "!!document.querySelector('[class*=\"user\"], [class*=\"profile\"], [class*=\"account\"], .HeaderUser')"
Установка адреса доставки
Адрес ОБЯЗАТЕЛЕН для добавления товаров в корзину. Без него кнопка «В корзину» может не работать или товары добавятся в «отложенные».
Пошаговая установка адреса (кнопка в шапке → «Добавить новый адрес» → ввод адреса → подсказка из списка → подтверждение → выбор времени доставки; если адрес не устанавливается — вне зоны доставки) — в references/01-preflight-address.md.
Структура сайта ВкусВилл
URL-паттерны, схема карточки товара и ключевые CSS-селекторы — в references/02-site-structure.md; сверяйся с ними при работе с DOM.
Добавление товара в корзину
Для каждого товара из списка (полные bash-команды и установка количества — в references/03-add-to-cart.md):
- Открой
https://vkusvill.ru/search/?q=<название_товара>, подожди 3 с. - Закрой модалки, если появились.
- Проверь, что товары загрузились (количество карточек > 0); если 0 — товар не найден, попробуй другой запрос.
- Прочитай первый товар: название, цена, вес/объём.
- Получи
state, найди индекс кнопки «В корзину», кликни её, подожди 1 с. - Если нужно количество > 1 — установи количество: весовой товар (кг) или штучный (шт) — процедура в
references/03-add-to-cart.md.
Весовые товары: продвинутые тактики
На vkusvill.ru весовые товары добавляются с дефолтным весом (обычно 0.85 кг). Контрол количества часто реализован как <span>, а не <input> — стандартный browser-use type не работает. Минус-кнопка может сбрасывать товар в 0 вместо уменьшения.
Пробуй тактики по порядку — переходи к следующей, если предыдущая не сработала:
Все 4 тактики (React-стейт через __REACT_INTERNALS__, клик на <span> с весом, кнопки «+»/«−» с проверкой шага, fallback с корректировками), определение фасовки и стратегия поиска — в references/04-weight-tactics.md.
Batch add mode (для списков 10+ товаров)
Когда нужно добавить много товаров (20+), поштучный search → state → click занимает 15-20 минут. Batch mode сокращает время в 3-4 раза.
Полная процедура (разделение штучные/весовые, batch-добавление через eval, проверка корзины) — в references/05-batch-verify.md.
Чекпоинты при добавлении в корзину
При добавлении 10+ товаров сохраняй прогресс каждые 10 позиций.
Формат файла cart-progress.md, когда сохранять, старт сессии и завершение — в references/06-checkpoints-share.md.
Полный workflow: добавление списка товаров
# === PRE-FLIGHT ===
browser-use close --all
node -e "new Promise(r=>setTimeout(r,1*1000)).then(process.exit)"
browser-use --headed open https://vkusvill.ru
node -e "new Promise(r=>setTimeout(r,4*1000)).then(process.exit)"
# Проверить авторизацию
browser-use eval "!!document.querySelector('[class*=\"user\"], [class*=\"profile\"], [class*=\"account\"], .HeaderUser')"
# Если false → ПОПРОСИТЬ ПОЛЬЗОВАТЕЛЯ АВТОРИЗОВАТЬСЯ
# Закрыть модалки
browser-use eval "document.querySelector('[class*=\"modal\"], [class*=\"popup\"]')?.querySelector('[class*=\"close\"], [aria-label=\"Закрыть\"]')?.click()"
# Проверить адрес
browser-use eval "document.querySelector('[class*=\"address\"], [class*=\"AddressButton\"]')?.textContent?.trim()?.length > 3"
# Если false → УСТАНОВИТЬ АДРЕС
# === ПРОВЕРИТЬ ЧЕКПОИНТ ===
# Если есть cart-progress.md со status: in_progress → предложить продолжить
# === BATCH: ШТУЧНЫЕ ТОВАРЫ ===
# Для каждого штучного товара (без state на каждой странице):
browser-use open "https://vkusvill.ru/search/?q=<товар>"
node -e "new Promise(r=>setTimeout(r,3*1000)).then(process.exit)"
browser-use eval "document.querySelector('[class*=\"modal\"], [class*=\"popup\"]')?.querySelector('[class*=\"close\"]')?.click()"
browser-use eval "document.querySelectorAll('[class*=\"product-card\"]').length" # > 0?
browser-use eval "document.querySelector('[class*=\"add-to-cart\"], [class*=\"AddButton\"]')?.click() || 'no_btn'"
node -e "new Promise(r=>setTimeout(r,1*1000)).then(process.exit)"
# НЕ делать state! Только eval для проверки
# ЧЕКПОИНТ каждые 10 товаров
# === ВЕСОВЫЕ ТОВАРЫ (отдельно, после батча) ===
# Для каждого весового товара — полный алгоритм с тактиками из секции выше
# === VERIFY CART ===
browser-use open "https://vkusvill.ru/cart/"
node -e "new Promise(r=>setTimeout(r,3*1000)).then(process.exit)"
browser-use eval "document.querySelectorAll('.ProductCard, .cart-item, [class*=\"basket-product\"]').length"
# === SHARE LINK ===
# (см. секцию «Получение ссылки на корзину» с обработкой truncation)
Детали: проверка корзины (содержимое + итог) — references/05-batch-verify.md; чекпоинты и получение ссылки на корзину с обработкой truncation — references/06-checkpoints-share.md.
Обработка ошибок
| Проблема | Решение |
|---|---|
| Товар не найден (0 карточек) | Упрости запрос. Попробуй синоним. Сообщи пользователю. |
| Модалка блокирует действия | eval чтобы кликнуть close. Или Escape. |
| Кнопка «В корзину» не нажимается | Проверь адрес доставки — без адреса кнопка может не работать |
| Количество не вводится | Попробуй кнопку «+». Если и она не работает — товар может быть unavailable |
| Корзина пустая после добавления | Проверь авторизацию. Без логина корзина не сохраняется. |
| Ссылка «Поделиться» не найдена | Верни URL корзины. Ссылка может быть недоступна в некоторых регионах. |
| Страница долго грузится | Увеличь sleep до 5 секунд. VkusVill — тяжёлый SPA. |
| «Element not found» после навигации | DOM перерисовался — запусти state заново для свежих индексов. |
| Сессия зависла | browser-use close --all, начни заново. |
| Неверный товар добавлен | Перейди в корзину, удали (кнопка «−» до 0 или «Удалить»), и повтори поиск с уточнённым запросом. |
JavaScript Eval Snippets
Готовые eval-сниппеты для типовых проверок (авторизация, товары, цена, адрес, счётчик, модалки) — в references/07-snippets.md.
Оптимизация: не злоупотребляй state
browser-use state дампит весь DOM. VkusVill SPA рендерит 5000+ px — state тормозит 10-30 секунд и забивает контекст.
Правила (когда делать state, а когда eval) и быстрые eval-сниппеты для типовых проверок — в references/07-snippets.md.
Советы
- Всегда
close --allпервым — устаревшие сессии — причина #1 зависаний. - Жди после навигации — VkusVill — тяжёлый SPA.
sleep 3-4послеopen. - Проверяй модалки перед каждым действием — они появляются непредсказуемо.
- Не переиспользуй индексы — после любого действия DOM меняется, делай
stateзаново. - Адрес — обязателен — без адреса корзина работает некорректно.
- Авторизация — обязательна — без логина товары не сохраняются.
- Упрощай запросы — «Филе куриной грудки ВкусВилл» → «куриная грудка».
- Проверяй корзину в конце — убедись что все товары добавлены.
- Используй
--profile— для сохранения сессии между запусками:browser-use --profile "vv" --headed open https://vkusvill.ru
Cleanup
browser-use close # закрыть текущую сессию
browser-use close --all # закрыть ВСЕ сессии (использовать между задачами)