Пакет правил Mbbrowser ApiServer (Rules)
Это самая важная часть данного раздела. Внедряя следующий пакет правил (Rules) в Cursor или Antigravity, вы позволяете модели ИИ полностью освоить все интерфейсы ApiServer Mbbrowser, коды ошибок и параметры приложений, гарантируя, что она никогда не будет «галлюцинировать» при написании скриптов.
IMPORTANT
Главный совет по автоматизации Mbbrowser: При запуске скриптов автоматизации убедитесь, что режим работы в настройках клиента Mbbrowser переключен на «Локальный режим» (Local Mode).
- Прирост производительности: Локальный режим обходит сетевую синхронизацию данных (выгрузку/загрузку данных среды), повышая эффективность запуска автоматизации и выполнения скриптов в десятки раз.
- Совет по безопасности: Выработайте привычку ежедневно создавать резервные копии локальных данных. Ваши основные бизнес-данные (среды, отпечатки, Cookies и т. д.) хранятся в каталоге
MBDATA. Пожалуйста, регулярно делайте резервные копии этой папки на внешние носители.
Как использовать
Для пользователей Cursor
- В корневом каталоге вашего проекта скриптов Mbbrowser создайте файл с именем
.cursor/rules/mbbrowser.mdc. - Скопируйте и вставьте все содержимое ниже в этот файл и сохраните его.
- Перезапустите Cursor Chat (или начните новый чат).
- ИИ будет автоматически использовать эти знания в каждом последующем разговоре.
Для пользователей Antigravity
Antigravity (IDE от Google с приоритетом на агентов) имеет свою систему правил и использует независимый каталог .agent/rules/.
Шаги:
- В корне проекта (корневой каталог рабочей области или git) создайте папку с именем .agent/rules/ (используйте ее, если она уже существует).
- Создайте в этой папке файл с именем mbbrowser.md (расширение должно быть .md, формат чистого Markdown).
- Скопируйте и вставьте спецификации, детали интерфейсов и шаблоны кода из «Пакета правил Mbbrowser ApiServer» в этот файл и сохраните его.
- Перезапустите Antigravity или откройте проект заново → Агент автоматически загрузит все файлы .md в папке .agent/rules/ и внедрит их в системную подсказку (действует на уровне рабочей области).
Пример структуры файлов:
your-project/
└── .agent/
└── rules/
└── mbbrowser.md ← Вставьте спецификации здесьДополнительные советы:
- Полная синхронизация: Если вы используете оба инструмента, вы можете поддерживать два пути:
.cursor/rules/mbbrowser.mdc(для Cursor) +.agent/rules/mbbrowser.md(для Antigravity). - Лимит символов: Лимит размера файла правил составляет около 12 000 символов; если контент слишком велик, рекомендуется разделить его на несколько файлов .md.
- Глобальный эффект: Для глобального эффекта во всех проектах разместите его в
~/.gemini/GEMINI.md.
Пакет правил Mbbrowser ApiServer (Rules)
Пожалуйста, скопируйте все содержимое ниже и замените им содержимое в файле, упомянутом выше.
# Полная спецификация разработки Mbbrowser (MBBrowser) + ApiServer
## 1. Краткое описание продукта
> [!IMPORTANT]
> **Секрет производительности**: Перед запуском крупномасштабной автоматизации убедитесь, что клиент Mbbrowser находится в **«Локальном режиме» (Local Mode)**. Это исключает облачную синхронизацию данных, ускоряя запуск сред в десятки раз. Всегда регулярно делайте резервные копии папки бизнес-базы данных **`MBDATA`**.
Mbbrowser (MBBrowser) — это профессиональный антидетект-браузер для изоляции сред нескольких аккаунтов. Каждая «среда» (Session) имеет собственные: отпечатки браузера, прокси-IP, Cookies, User-Agent, часовой пояс и язык.
ApiServer (apiserver.exe) — это локальный сервис HTTP API, предоставляемый Mbbrowser, позволяющий скриптам программно управлять браузерными средами.
## 2. Запуск ApiServer
```bash
apiserver.exe --port=8186 \
--account=your_email@qq.com \
--app_id=ВАШ_APP_ID \
--app_key=ВАШ_APP_KEY \
--hide=off \
--return=on \
--logs=on
```
Описание параметров:
- port: Прослушиваемый порт, по умолчанию 8186.
- account: Аккаунт для входа в Mbbrowser (email).
- app_id: Получается в клиенте Mbbrowser «Личный кабинет → Настройки API».
- app_key: Получается в клиенте Mbbrowser «Личный кабинет → Настройки API».
- hide=off: Режим с окном (рекомендуется для отладки); hide=on для скрытого фонового режима.
- return=on: Отображать данные ответа API в консоли.
- logs=on: Записывать данные JSON в лог-файлы.
После успешного запуска адрес API: http://127.0.0.1:8186.
## 3. Стандарты связи
- Все интерфейсы используют запросы HTTP POST.
- Content-Type: application/json.
- Базовый URL: http://127.0.0.1:8186.
- code=0 для успеха; отрицательный код для ошибки, сообщение (message) содержит детали.
Стандартный формат ответа:
```json
{
"message": "Success",
"code": 0,
"data": { ... }
}
```
## 4. Аутентификация аккаунта
### 4.1 Вход в аккаунт (Используется при смене аккаунтов)
POST /login
```json
{
"APP_ID": "7e147176e1d756eb03c0e18e7b640c23",
"APP_KEY": "ВАШ_APP_KEY",
"Account": "test01@qq.com",
"return": "on",
"logs": "on",
"hide": "off"
}
```
Успешный ответ: {"msg": "Login Success", "status": 0, "data": "Login Account: test01@qq.com"}
Примечание: ApiServer уже содержит данные аутентификации при запуске; этот вызов обычно не требуется.
### 4.2 Выход из ApiServer
POST /api/v1/quit
Без параметров. Успех возвращает code=0 и закрывает ApiServer.
## 5. Основные интерфейсы: Управление жизненным циклом среды
### 5.1 Открытие среды (Самый критичный интерфейс)
POST /api/v1/browser/start
[Макс. частота: Не ограничена, но рекомендуется контроль через --interval-seconds]
Параметры запроса:
```json
{
"Session_ID": ["373808cb37bd63f5f7d92415e736e85f"],
"isHeadless": false,
"args": [
"--disable-extensions",
"--blink-settings=imagesEnabled=false",
"--interval-seconds=2"
]
}
```
Важные примечания:
- Session_ID — это массив (Array), поддерживающий одновременный запуск нескольких сред.
- isHeadless=false для режима с окном (видимое окно), по умолчанию true.
- --interval-seconds контролирует интервал запуска (в секундах) между несколькими средами.
- --blink-settings=imagesEnabled=false отключает загрузку изображений (быстрее).
- --disable-extensions отключает расширения браузера (обычно для автоматизации).
Ключевые поля успешного ответа:
```json
{
"message": "Success",
"code": 0,
"data": {
"listid": [{
"Session_Name": "Бизнес-среда 01",
"Session_ID": "373808cb37bd63f5f7d92415e736e85f",
"browser_CDP_Port": 46973,
"webdriver": "C:\\Users\\Admin\\houniao\\Driver\\100\\chromedriver.exe",
"status": 0
}],
"total": 1
}
}
```
[ЧРЕЗВЫЧАЙНО ВАЖНО] Правильная интеграция для каждого фреймворка:
Python Playwright:
```python
port = env_data["browser_CDP_Port"]
ws_endpoint = f"ws://127.0.0.1:{port}/json/version"
from playwright.sync_api import sync_playwright
pw = sync_playwright().start()
browser = pw.chromium.connect_over_cdp(ws_endpoint)
context = browser.contexts[0] # ОБЯЗАТЕЛЬНО ИСПОЛЬЗУЙТЕ СУЩЕСТВУЮЩИЙ КОНТЕКСТ! Нельзя использовать new_context()
page = context.pages[0] if context.pages else context.new_page()
```
JavaScript Playwright:
```javascript
const { chromium } = require('playwright');
const port = envData.browser_CDP_Port;
const wsEndpoint = `ws://127.0.0.1:${port}/json/version`;
const browser = await chromium.connectOverCDP(wsEndpoint);
const context = browser.contexts()[0]; // ОБЯЗАТЕЛЬНО ИСПОЛЬЗУЙТЕ СУЩЕСТВУЮЩИЙ КОНТЕКСТ!
const page = context.pages()[0] || await context.newPage();
```
Python Selenium:
```python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
options = Options()
# debuggerAddress в формате "IP:PORT", без ws://
options.add_experimental_option("debuggerAddress", f"127.0.0.1:{env_data['browser_CDP_Port']}")
service = Service(executable_path=env_data['webdriver'])
driver = webdriver.Chrome(service=service, options=options)
```
JavaScript Puppeteer:
```javascript
const puppeteer = require('puppeteer');
const port = envData.browser_CDP_Port;
const wsEndpoint = `ws://127.0.0.1:${port}/json/version`;
const browser = await puppeteer.connect({
browserWSEndpoint: wsEndpoint,
defaultViewport: null
});
```
### 5.2 Закрытие среды
POST /api/v1/browser/stop
```json
{
"Session_ID": "373808cb37bd63f5f7d92415e736e85f"
}
```
Примечание: Session_ID в этом интерфейсе — это строка (а не массив).
Успех: {"message": "Success", "code": 0, "data": {"action": "StopSession_ID", "status": 0}}
### 5.3 Принудительное завершение
POST /api/v1/browser/kill
```json
{
"Session_ID": "373808cb37bd63f5f7d92415e736e85f"
}
```
Примечание: Обычная остановка (stop) может оставлять процессы после использования некоторых расширений; рекомендуется принудительное завершение (kill) для гарантии освобождения ресурсов.
### 5.4 Проверка статуса выполнения
POST /api/v1/browser/status
```json
{
"Session_ID": ["4e6d0dca26ef42be9bc4472779d2550f"],
"Actived_Type": 0
}
```
Actived_Type: 0=Все, 1=Только запущенные, 2=Только не запущенные.
Возвращает Session_Actived=1 для запущенных, 0 для незапущенных.
## 6. Интерфейсы запроса среды
### 6.1 Получение списка сред (Многомерная фильтрация)
POST /api/v1/session/listid
Параметры фильтрации (Все необязательны):
- Session_Name, Session_GroupName, Proxy_Ip, Proxy_Type и т. д.
- CurrentPage, ListNum (по умолчанию 50, макс 500).
Успех:
```json
{
"code": 0,
"data": {
"listid": ["373808...", "705cc..."],
"total": 2
}
}
```
### 6.2 Запрос конфигурационных данных для конкретного Session_ID
POST /api/v1/session/id_container
```json
{
"Session_ID": ["373808cb37bd63f5f7d92415e736e85f"],
"Session_container_type": 1
}
```
Session_container_type: 1 = Полная детализация (включая browser_CDP_Port, webdriver, полный отпечаток).
## 7. Интерфейсы создания и обновления
### 7.1 Создание среды
POST /api/v1/session/create
[Макс. частота: 40 запросов/мин]
Важный параметр `Automatic_Configure`:
- `0` (Рекомендуется): Быстрое создание (автоподбор отпечатков из библиотеки Mbbrowser, без валидации прокси).
- `1`: Включает валидацию IP; создание занимает гораздо больше времени (установите таймаут запроса > 68с).
### 7.2 Обновление базовой информации
POST /api/v1/session/update
Включает Session_Name, Session_Desc, Session_Group, Cookie (JSON-строка) и т. д.
### 7.3 Обновление прокси
POST /api/v1/session/proxy/update
[Макс. частота: 50 запросов/мин]
Поддерживает: HTTP, HTTPS, SSH, SOCKS4/5, Oxylabs, Luminati, smartproxy, noproxy.
### 7.4 Удаление сред
POST /api/v1/session/delete
`Is_Delete_All: 1` выполняет полное удаление.
## 8. Управление Cookie
### 8.1 Импорт Cookie (Из файла)
POST /api/v1/session/import-cookie
```json
{
"Session_ID": "session_id",
"Cookie_File": "C:\\cookies\\account1.txt"
}
```
Поддерживает форматы .txt (Netscape) и .json.
### 8.2 Экспорт Cookie (В файл)
POST /api/v1/session/export-cookie
Использует путь `Export_Cookie_File`. Экспортирует как JSON, если расширение .json, иначе в формате Netscape.
## 9. Управление плагинами
- POST /api/v1/plugin/list (Список всех плагинов аккаунта)
- POST /api/v1/session/id_plugin_list (Список плагинов в среде)
- POST /api/v1/session/plugin_install (Установить плагин)
- POST /api/v1/session/plugin_delete (Удалить плагин)
## 10. Управление скриптами автоматизации
- POST /api/v1/session/id_script_list (Проверить скрипты среды)
- POST /api/v1/session/id_script_add (Назначить скрипт из библиотеки)
- POST /api/v1/session/id_script_active (Активировать скрипт)
---
## 11. Полная таблица кодов ошибок
### CODE (Уровень запроса)
0 Успех; -1 Ошибка входа; -105 Ошибка валидации прокси; -106 Неверный часовой пояс; -108 Ошибка разрешения экрана.
### Status (Поле статуса открытия среды)
0 Успех; -7 Уже запущено; -22 Session_ID не найден.
## 12. Приложение: Допустимые значения
### 12.1 SystemOS
Windows | iPhone | iPad | MacIntel | Android | Linux x86_64 и т. д.
### 12.2 LanguageCode
zh-CN;zh;q=0.9 | en-US;en;q=0.9 | ja;q=0.9 | fr-FR;fr;q=0.9 и т. д.
### 12.3 Session_Resolution
1920x1080 | 1440x900 | 1366x768 | 2560x1440 | 375x812 (iPhone X) и т. д.
## 13. Меры предосторожности при разработке
1. **Тип Session_ID**: /start и /id_container используют массив (Array); /stop, /update, /proxy/update используют строку (String).
2. **Контекст Playwright**: ВСЕГДА используйте `browser.contexts[0]`; НИКОГДА не используйте `new_context()`.
3. **Selenium**: Используйте `debuggerAddress` ("IP:PORT"); НЕ используйте ws.
4. **Многопоточность**: Рекомендуется не более 20 сред в одной партии.
5. **Проверка статуса**: Всегда проверяйте `data.listid[0].status` после /start.
6. **Валидация прокси**: Используйте `Public_ip` из ответа /start для проверки работы прокси.
7. **Валидные значения**: Разрешение/Язык/Часовой пояс должны использовать валидные значения из приложения, чтобы избежать ошибок -106/-107/-108/-110.
## 14. Полный шаблон скрипта на Python
```python
"""
Шаблон автоматизации Mbbrowser + Playwright Python
"""
import requests, threading
from playwright.sync_api import sync_playwright
def start_env(session_id: str):
resp = requests.post("http://127.0.0.1:8186/api/v1/browser/start",
json={"Session_ID": [session_id]}).json()
return resp["data"]["listid"][0] if resp["code"] == 0 else None
def do_task(session_id):
env_data = start_env(session_id)
if not env_data: return
with sync_playwright().start() as pw:
# Подключение через CDP
browser = pw.chromium.connect_over_cdp(f"ws://127.0.0.1:{env_data['browser_CDP_Port']}/json/version")
context = browser.contexts[0] # Важно: берем существующий контекст
page = context.pages[0] if context.pages else context.new_page()
page.goto("https://example.com")
print(f"[{session_id}] Заголовок: {page.title()}")
browser.close()
requests.post("http://127.0.0.1:8186/api/v1/browser/stop", json={"Session_ID": session_id})
if __name__ == "__main__":
sids = ["yoursid1", "yoursid2"]
threads = [threading.Thread(target=do_task, args=(sid,)) for sid in sids]
for t in threads: t.start()
for t in threads: t.join()
```Проверка конфигурации
После завершения настройки введите в чате:
Напиши скрипт на Python с использованием Mbbrowser ApiServer для получения всех ID из группы "TestGroup",
одновременно открой их (не более 10), перейди на https://example.com в каждой среде через Playwright,
сделай скриншот и закрой среды. Включи полную обработку ошибок.Успех, если ИИ правильно использует:
- ✅
POST /api/v1/session/listid - ✅
Session_IDкак массив (Array) в /start - ✅
browser.contexts[0] - ✅
Session_IDкак строку (String) в /stop
