Skip to content

Живое демо: общение с ИИ, генерация полных скриптов за один шаг

В этой главе представлено полное описание реального процесса от «высказывания требований на естественном языке» до «получения готового к запуску скрипта» с подробным описанием каждого шага.


Сценарий демонстрации

Бизнес-контекст: У вас есть 20 аккаунтов продавцов Amazon, и вам нужно каждый день проверять количество заказов в статусе "Pending" (Ожидающие) в каждом аккаунте, сводя данные в отчет Excel для вашей команды.

Традиционный метод: Вручную заходить в каждый аккаунт один за другим, записывать количество заказов и заполнять Excel. Это занимает около 2 часов.

Использование ИИ + Mbbrowser: Опишите требования, ИИ сгенерирует скрипт, а скрипт сделает все остальное. Общее время — 15 минут (включая настройку).


Шаг 1: Подготовка (5 минут)

NOTE

Предполагается, что вы выполнили следующие настройки из предыдущих глав:

  • ✅ Установлен Cursor или Antigravity.
  • ✅ Пакет правил Mbbrowser Rules загружен в Cursor.
  • ✅ Mbbrowser ApiServer запущен (http://127.0.0.1:8186).
  • ✅ Ваши аккаунты Amazon уже авторизованы в средах Mbbrowser (Cookies сохранены).

Подготовьте файл sessions.txt

В папке вашего проекта создайте файл sessions.txt и впишите все ID сред, с которыми вы хотите работать:

a1b2c3d4e5f6789012345678901234ab
b2c3d4e5f67890123456789012345bcd
c3d4e5f678901234567890123456cde
... (один Session_ID в строке, всего 20 строк)

Шаг 2: Ввод требований в Cursor (30 секунд)

Нажмите Ctrl + L, чтобы открыть Cursor Chat, и введите следующее:

У меня есть файл sessions.txt со списком Session_ID для 20 аккаунтов Mbbrowser, по одному в строке.
В этих средах уже выполнен вход в аккаунты Amazon.

Пожалуйста, помоги мне сгенерировать скрипт на Python со следующими функциями:
1. Прочитать все Session_ID из sessions.txt.
2. Пакетно открыть все среды (до 10 одновременно).
3. После того как управление средой перейдет к Playwright:
   a. Подождать загрузки страницы (среды обычно остаются на последней закрытой странице).
   b. Перейти на https://www.amazon.com/gp/orders-v2/list (страница заказов продавца Amazon).
   c. Подождать появления элемента .a-row.shipment (сигнализирует о загрузке списка заказов).
   d. Посчитать количество элементов .shipment-status-buyerPending на странице (это заказы "Pending").
   e. Записать первые 8 символов Session_ID + количество ожидающих заказов в результаты.
4. Закрыть все среды после завершения всех операций.
5. Сохранить результаты в файл amazon_orders_[сегодняшняя дата].xlsx, 
   Колонки: Env ID (первые 8 симв.), Pending Order Count, Check Time, Status.

Сохраняй скриншоты в папку errors/, если возникнут исключения, и записывай "Check Failed" в таблицу результатов.

Шаг 3: ИИ генерирует код (ок. 30 секунд)

После получения запроса ИИ Cursor сгенерирует полный код. Результат должен выглядеть примерно так:

python
"""
Скрипт проверки заказов Mbbrowser + Amazon
Автоматически проверяет количество ожидающих заказов во всех средах.
"""
import threading
import datetime
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
import openpyxl
from playwright.sync_api import sync_playwright, TimeoutError as PWTimeout

# ==============================
# Конфигурация (измените при необходимости)
# ==============================
APISERVER   = "http://127.0.0.1:8186"
SESSIONS_FILE = "sessions.txt"
MAX_WORKERS  = 10   # Максимальная конкурентность
ERRORS_DIR   = Path("errors")
ERRORS_DIR.mkdir(exist_ok=True)

results_lock = threading.Lock()
results = []

# ==============================
# Обертка APIServer
# ==============================
def start_env(session_id: str) -> dict | None:
    try:
        resp = requests.post(
            f"{APISERVER}/api/v1/browser/start",
            json={"Session_ID": [session_id], "isHeadless": False},
            timeout=30
        )
        data = resp.json()
        if data["code"] == 0:
            return data["data"]["listid"][0]
    except Exception as e:
        print(f"[{session_id[:8]}] Ошибка APIServer: {e}")
    return None

def stop_env(session_id: str):
    try:
        requests.post(
            f"{APISERVER}/api/v1/browser/stop",
            json={"Session_ID": session_id}, 
            timeout=10
        )
    except Exception:
        pass

# ==============================
# Задача для одного аккаунта
# ==============================
def check_orders(session_id: str):
    now = datetime.datetime.now().strftime("%H:%M:%S")
    env_short = session_id[:8]
    
    env_data = start_env(session_id)
    if not env_data:
        with results_lock:
            results.append({
                "env_id": env_short,
                "pending_orders": "N/A",
                "check_time": now,
                "status": "Ошибка открытия среды"
            })
        return
    
    port = env_data.get("browser_CDP_Port")
    ws   = f"ws://127.0.0.1:{port}/json/version"
    
    pw = sync_playwright().start()
    try:
        browser = pw.chromium.connect_over_cdp(ws)
        context = browser.contexts[0]
        page    = context.pages[0] if context.pages else context.new_page()
        
        # Переход на страницу заказов Amazon
        page.goto(
            "https://www.amazon.com/gp/orders-v2/list",
            wait_until="domcontentloaded",
            timeout=20000
        )
        
        # Ожидание загрузки списка заказов
        page.wait_for_selector(".a-row.shipment", timeout=15000)
        
        # Подсчет ожидающих заказов
        pending = page.locator(".shipment-status-buyerPending").count()
        print(f"[{env_short}] ✅ Ожидающих заказов: {pending}")
        
        with results_lock:
            results.append({
                "env_id": env_short,
                "pending_orders": pending,
                "check_time": now,
                "status": "Success"
            })
        
        browser.close()
        
    except PWTimeout:
        page.screenshot(path=str(ERRORS_DIR / f"{env_short}_timeout.png"))
        with results_lock:
            results.append({
                "env_id": env_short,
                "pending_orders": "N/A",
                "check_time": now,
                "status": "Таймаут страницы"
            })
    except Exception as e:
        try:
            page.screenshot(path=str(ERRORS_DIR / f"{env_short}_error.png"))
        except Exception:
            pass
        with results_lock:
            results.append({
                "env_id": env_short,
                "pending_orders": "N/A",
                "check_time": now,
                "status": f"Exception: {str(e)[:50]}"
            })
    finally:
        try:
            pw.stop()
        except Exception:
            pass
        stop_env(session_id)

# ==============================
# Основная программа
# ==============================
def main():
    # Чтение списка Session_ID
    session_ids = [
        line.strip()
        for line in Path(SESSIONS_FILE).read_text().splitlines()
        if line.strip()
    ]
    print(f"📋 Всего {len(session_ids)} аккаунтов, макс. конкурентность {MAX_WORKERS}")
    
    # Параллельное выполнение
    with ThreadPoolExecutor(max_workers=MAX_WORKERS) as pool:
        futures = {pool.submit(check_orders, sid): sid for sid in session_ids}
        for future in as_completed(futures):
            sid = futures[future]
            try:
                future.result()
            except Exception as e:
                print(f"[{sid[:8]}] Необработанное исключение: {e}")
    
    # Сохранение отчета Excel
    today = datetime.date.today().strftime("%Y%m%d")
    filename = f"amazon_orders_{today}.xlsx"
    
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = "Результаты проверки заказов"
    ws.append(["Env ID (первые 8)", "Pending Orders", "Check Time", "Status"])
    for r in results:
        ws.append([r["env_id"], r["pending_orders"], r["check_time"], r["status"]])
    
    wb.save(filename)
    
    # Сводный отчет
    success = sum(1 for r in results if r["status"] == "Success")
    print(f"\n{'='*40}")
    print(f"✅ Успешно: {success} / {len(results)}")
    print(f"📄 Отчет сохранен в: {filename}")
    print(f"❌ Скриншоты ошибок в папке: errors/")

if __name__ == "__main__":
    main()

Шаг 4: Установка зависимостей и запуск (2 минуты)

После генерации кода ИИ обычно советует, какие зависимости нужно установить:

bash
pip install playwright requests openpyxl

Затем запустите напрямую:

bash
python check_amazon_orders.py

Ожидаемый вывод

📋 Всего 20 аккаунтов, макс. конкурентность 10
[a1b2c3d4] ✅ Ожидающих заказов: 3
[b2c3d4e5] ✅ Ожидающих заказов: 0
[c3d4e5f6] ✅ Ожидающих заказов: 7
... 
========================================
✅ Успешно: 18 / 20
📄 Отчет сохранен в: amazon_orders_20260226.xlsx
❌ Скриншоты ошибок в папке: errors/

Общие проблемы и советы по исправлению через ИИ

«Скрипт работает, но не находит элементы заказов»

Выберите соответствующий код и нажмите Ctrl + K. Введите:

Селектор на странице Amazon изменился. Актуальный селектор строки заказа — .order-info, а селектор статуса ожидания — .order-status-pending. Пожалуйста, обнови код.

«Добавь функцию: также собирай детали заказов»

Продолжите разговор в чате:

На основе приведенного выше кода, после сбора количества заказов, пожалуйста, также собери ID заказа (.a-fixed-right-grid-col .a-link-normal) и ожидаемую дату отправки (.expected-ship-date) для каждого ожидающего заказа и запиши их в Excel.

«Конкурентность слишком высокая, возникают сбои; нужно ограничение скорости»

На основе ThreadPoolExecutor добавь 3-секундное ожидание перед запуском каждой новой задачи, чтобы избежать проблем с памятью из-за одновременного открытия слишком большого количества сред.

Резюме: лучшие практики написания скриптов через ИИ

[ Подготовка ]
1. Пакет Rules внедрен → ИИ понимает все интерфейсы Mbbrowser.
2. Подтвердите, что APISERVER запущен.

[ Описание требований ]
Чем конкретнее, тем лучше:
  ✅ "Перейди на https://xxx, подожди появления элемента #main-content, нажми .order-btn, подожди всплывающего окна успеха."
  ❌ "Помоги мне управлять заказами."

[ Генерация ]
Обычно 80% кода пригодно к использованию сразу. Исправьте мелкие недочеты через уточняющие вопросы в чате.

[ Итеративная оптимизация ]
"Добавь функцию xx на основе этого" → ИИ внесет изменения без переписывания всего кода.

IMPORTANT

Важное напоминание: В коде, сгенерированном ИИ, иногда могут возникать небольшие ошибки. Всегда проводите тест на 1-2 тестовых аккаунтах перед масштабным развертыванием. Переходите ко всем аккаунтам только после проверки.


TIP

🎉 Поздравляем! Теперь вы владеете полным набором методов генерации скриптов автоматизации для Mbbrowser с помощью моделей ИИ.

Возникли проблемы? Обратитесь к соответствующим главам: