Skip to content

Быстрый старт: управление средой Mbbrowser

Эта глава содержит полные, готовые к запуску скрипты для трех языков программирования. Выберите тот, с которым вы лучше знакомы. Основная логика остается идентичной: запросить ws-адрес у ApiServer, а затем использовать connectOverCDP для получения контроля над Mbbrowser.


Способ 1: JavaScript / Node.js

Создайте файл start.js:

javascript
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);

Запуск:

bash
node start.js

Способ 2: Версия на Python

Создайте файл start_playwright.py:

python
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()

Запуск:

bash
python start_playwright.py

Способ 3: Версия на Java

NOTE

Для Java мы рекомендуем использовать Менеджер скриптов автоматизации в клиенте Mbbrowser, который автоматически обрабатывает JAR-файлы и драйверы. Приведенный ниже код можно использовать напрямую в редакторе скриптов.

java
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: Критическое различие

javascript
// ❌ Стандарт 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.http127.0.0.1:9222Selenium (debuggerAddress)
data.wsws://127.0.0.1:9222/devtools/browser/xxxPlaywright / Puppeteer

Для connectOverCDP в Playwright требуется полный адрес ws://....

browser.contexts()[0]: не создавайте новые контексты

javascript
// ❌ НЕВЕРНО: создает новый контекст; куки и хранилище 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() возвращает пустой массив

При первом открытии среды инициализация контекста по умолчанию может занять мгновение. Добавьте небольшое ожидание:

javascript
// Ждем появления контекста (до 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 остановки:

javascript
await axios.post(`${API_URL}/api/v1/browser/stop`, { Session_ID: SESSION_ID });

TIP

Готовы писать код? В следующей главе Справочник по основным API вы узнаете, как использовать мощные функции Locator и Page в Playwright.