Быстрый старт: управление средой Mbbrowser
Эта глава содержит полные, готовые к запуску скрипты для трех языков программирования. Выберите тот, с которым вы лучше знакомы. Основная логика остается идентичной: запросить ws-адрес у ApiServer, а затем использовать connectOverCDP для получения контроля над Mbbrowser.
Способ 1: JavaScript / Node.js
Создайте файл start.js:
const { chromium } = require('playwright');
const axios = require('axios');
// ============================
// Конфигурация (заполните актуальные данные)
// ============================
const API_URL = 'http://127.0.0.1:8186';
const SESSION_ID = 'вставьте_ваш_session_id'; // Правой кнопкой в Mbbrowser → Копировать ID среды
async function main() {
// ── Шаг 1: Говорим ApiServer открыть конкретную среду ────────
console.log('⏳ Открываем среду Mbbrowser...');
let wsEndpoint;
try {
const response = await axios.post(`${API_URL}/api/v1/browser/start`, {
Session_ID: SESSION_ID
});
if (response.data.code !== 0) {
console.error('❌ Ошибка запуска среды:', response.data.message);
return;
}
// ── Шаг 2: Извлекаем адрес WebSocket (поле для Playwright) ──
wsEndpoint = response.data.data.ws;
console.log('✅ Среда открыта. ws адрес:', wsEndpoint);
} catch (err) {
console.error('❌ Не удалось подключиться к ApiServer. Убедитесь, что он запущен!', err.message);
return;
}
// ── Шаг 3: Используем connectOverCDP для перехвата управления ──
const browser = await chromium.connectOverCDP(wsEndpoint);
console.log('🎉 Управление Playwright успешно установлено!');
try {
// ── Шаг 4: Получаем текущий контекст и страницу ─────────────
// В средах Mbbrowser есть контекст по умолчанию; используем первый.
const context = browser.contexts()[0];
const page = context.pages()[0] || await context.newPage();
// ── Шаг 5: Выполняем бизнес-операции ─────────────────────
await page.goto('https://www.mbbrowser.com', { waitUntil: 'domcontentloaded' });
console.log('📄 Заголовок страницы:', await page.title());
// Ждем 3 секунды для наблюдения
await page.waitForTimeout(3000);
console.log('✅ Выполнение скрипта завершено!');
} finally {
// Отключаем Playwright (окно Mbbrowser продолжит работу)
await browser.close();
}
}
main().catch(console.error);Запуск:
node start.jsСпособ 2: Версия на Python
Создайте файл start_playwright.py:
import requests
from playwright.sync_api import sync_playwright
# ============================
# Конфигурация
# ============================
API_URL = "http://127.0.0.1:8186"
SESSION_ID = "вставьте_ваш_session_id"
def get_ws_endpoint(session_id: str) -> str or None:
"""Вызывает ApiServer Mbbrowser для запуска среды и возвращает ws-адрес"""
print("⏳ Открываем среду Mbbrowser...")
try:
resp = requests.post(
f"{API_URL}/api/v1/browser/start",
json={"Session_ID": session_id},
timeout=30
)
data = resp.json()
except requests.exceptions.ConnectionError:
print("❌ Не удалось подключиться к ApiServer! Убедитесь, что apiserver.exe запущен.")
return None
if data.get("code") != 0:
print(f"❌ Ошибка запуска среды: {data.get('message')}")
return None
ws = data["data"]["ws"]
print(f"✅ Среда открыта. ws адрес: {ws}")
return ws
def main():
ws_endpoint = get_ws_endpoint(SESSION_ID)
if not ws_endpoint:
return
with sync_playwright() as p:
# ── connect_over_cdp для перехвата управления ────────────
browser = p.chromium.connect_over_cdp(ws_endpoint)
print("🎉 Управление Playwright успешно установлено!")
# Используем существующий BrowserContext по умолчанию (сохраняет куки, хранилище и т.д.)
context = browser.contexts[0]
# Берем первую страницу; создаем новую, если страниц нет
page = context.pages[0] if context.pages else context.new_page()
# ── Выполняем бизнес-операции ──────────────────────────────
page.goto("https://www.mbbrowser.com", wait_until="domcontentloaded")
print(f"📄 Заголовок страницы: {page.title()}")
page.wait_for_timeout(3000)
print("✅ Выполнение скрипта завершено!")
browser.close()
if __name__ == "__main__":
main()Запуск:
python start_playwright.pyСпособ 3: Версия на Java
NOTE
Для Java мы рекомендуем использовать Менеджер скриптов автоматизации в клиенте Mbbrowser, который автоматически обрабатывает JAR-файлы и драйверы. Приведенный ниже код можно использовать напрямую в редакторе скриптов.
import com.microsoft.playwright.*;
import java.net.URI;
import java.net.http.*;
import org.json.*;
public class MBPlaywright {
static final String API_URL = "http://127.0.0.1:8186";
static final String SESSION_ID = "вставьте_ваш_session_id";
public static void main(String[] args) throws Exception {
// ── Шаг 1: Вызов ApiServer для запуска среды ─────────────────
System.out.println("⏳ Открываем среду Mbbrowser...");
HttpClient httpClient = HttpClient.newHttpClient();
String body = "{\"Session_ID\":\"" + SESSION_ID + "\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(API_URL + "/api/v1/browser/start"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = httpClient.send(
request, HttpResponse.BodyHandlers.ofString()
);
JSONObject data = new JSONObject(response.body());
String wsEndpoint = data.getJSONObject("data").getString("ws");
System.out.println("✅ Среда открыта. ws: " + wsEndpoint);
// ── Шаг 2: Перехват управления через connectOverCDP ──────────
// Пропускаем загрузку встроенных браузеров
System.setProperty("playwright.skip.browser.download", "1");
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.chromium().connectOverCDP(wsEndpoint);
System.out.println("🎉 Управление Playwright успешно установлено!");
BrowserContext context = browser.contexts().get(0);
Page page = context.pages().isEmpty()
? context.newPage()
: context.pages().get(0);
page.navigate("https://www.mbbrowser.com");
System.out.println("📄 Заголовок страницы: " + page.title());
Thread.sleep(3000);
System.out.println("✅ Выполнение скрипта завершено!");
browser.close();
}
}
}Построчный анализ
connectOverCDP против launch: Критическое различие
// ❌ Стандарт Playwright: создает новое пустое окно Chrome
const browser = await chromium.launch();
// ✅ Практика Mbbrowser Playwright: берет под контроль существующую среду с отпечатками
const browser = await chromium.connectOverCDP(wsEndpoint);| Сравнение | Стандартный launch() | Mbbrowser connectOverCDP() |
|---|---|---|
| Состояние браузера | Совершенно новый, пустой | Все отпечатки, прокси и куки на месте |
| Последствия | Сайт видит голый бот Chrome | Сайт видит «реального пользователя» |
| Мультиаккаунтинг | Невозможно различить | Точное соответствие через Session_ID |
Почему используется data.ws вместо data.http?
| Поле | Пример формата | Подходящий фреймворк |
|---|---|---|
data.http | 127.0.0.1:9222 | Selenium (debuggerAddress) |
data.ws | ws://127.0.0.1:9222/devtools/browser/xxx | Playwright / Puppeteer ✅ |
Для connectOverCDP в Playwright требуется полный адрес ws://....
browser.contexts()[0]: не создавайте новые контексты
// ❌ НЕВЕРНО: создает новый контекст; куки и хранилище Mbbrowser будут потеряны.
const context = await browser.newContext();
// ✅ ВЕРНО: используйте существующий контекст Mbbrowser (сохраняет состояние аккаунта).
const context = browser.contexts()[0];Устранение неполадок
❓ Ошибка: connect ECONNREFUSED 127.0.0.1:8186
ApiServer не запущен или указан неверный порт. Убедитесь, что apiserver.exe запущен в окне терминала.
❓ Ошибка: Browser closed или Target page, context or browser has been closed
Среда Mbbrowser была закрыта (тайм-аут или вручную). Вызовите /api/v1/browser/start снова.
❓ browser.contexts() возвращает пустой массив
При первом открытии среды инициализация контекста по умолчанию может занять мгновение. Добавьте небольшое ожидание:
// Ждем появления контекста (до 5 секунд)
let context;
for (let i = 0; i < 50 && !browser.contexts().length; i++) {
await new Promise(r => setTimeout(r, 100));
}
context = browser.contexts()[0];❓ Закрывает ли browser.close() окно Mbbrowser?
В режиме connectOverCDP команда browser.close() только отключает связь с Playwright — она не закрывает само окно Mbbrowser. Чтобы закрыть его, вызовите API остановки:
await axios.post(`${API_URL}/api/v1/browser/stop`, { Session_ID: SESSION_ID });TIP
Готовы писать код? В следующей главе Справочник по основным API вы узнаете, как использовать мощные функции Locator и Page в Playwright.
