
VkusVill Cart
@vkusvill-cart
Automate a grocery cart on vkusvill.ru via the browser-use CLI — search products, add to cart with correct quantities (weight vs pieces), set the delivery address, and return a share link. Use whenever the user already has a shopping list and asks «закажи продукты ВкусВилл», «собери корзину ВкусВилл», or wants to turn a meal plan into a real order. Includes login and address pre-flight checks. Do NOT use for recipes or meal planning (cooking/meal-planner) or for other marketplaces (smart-shopper/marketplace-ru).
Who the VkusVill Cart skill is for
- Busy families — turn a weekly shopping list into a ready cart in a couple of minutes instead of hunting for each item by hand.
- People who plan meals — connect a plan from the meal planner skill to a real order: recipes → products → cart.
- Anyone tired of clicking — assemble a repeating grocery run in one message and share the link with the family.
What the skill can do
- Search and substitutes — finds the product by query; on zero results it simplifies the query and tries a synonym, and suggests the nearest alternative rather than staying silent.
- Weight vs pieces — detects the pack type (kg, pcs, pack) and uses the right input method, including the React state of VkusVill's heavy SPA.
- Address and login — before adding anything, it checks the login and delivery address: without them the cart misbehaves.
- Cart link — returns a share link, with protection against truncation of long strings.
How it works
The skill drives a real browser (the browser-use skill): it opens pages, reads the DOM, clicks cards, and closes pop-up modals — like a human user. For long lists a batch mode kicks in: piece goods are added with fast eval commands without dumping the full page, which speeds the order up 3–4×. Progress is written to a checkpoint every 10 items, so a session can resume after a pause.
Useful details
- Heavy SPA — vkusvill.ru renders 5000+ px, so the skill checks state with targeted
evalcalls instead of a fullstatedump on every step. - Browser profile — with the
--profileflag the session persists between runs, so you don't re-login each time. - Safety — the agent never enters passwords or confirms payment: the final step is always yours.
For other storefronts there's the smart shopper skill, and the cooking skill can supply recipes for the order.
Ready to close the grocery task? Send your list — launch the VkusVill Cart skill right now.
Does the skill place and pay for the order itself?
No. The skill adds products to a cart on vkusvill.ru and returns a share link to it — you do the final check and payment yourself. The agent never types your login or password: you sign in once manually in the window that opens.
How does it handle weighted goods?
It distinguishes weighted items (sold by kilo) from piece goods (pcs/pack) and picks the right way to enter the quantity: a direct input, the card's React state, clicking the weight span, or the +/− buttons. If it can't set the exact weight, it adds the default and clearly flags what to adjust by hand.
What do I need to start?
A vkusvill.ru account and a delivery address — without them, items won't save and the add-to-cart button may not work. Running the browser needs Python and the browser-use package; the skill asks permission before installing and never installs silently.
What if a product is out of stock?
The skill simplifies the query, tries synonyms and the nearest alternative, and if nothing is found it says so and suggests a substitute instead of adding a random item.
Is it free?
The skill itself is free — you only pay tokens for the agent's work. The order is paid separately on the VkusVill website, as usual.
Корзина ВкусВилл — 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 # закрыть ВСЕ сессии (использовать между задачами)