Браузерный движок

Браузерный движок

Некоторые балансеры (mirage, kinobase, turbo, zetflix, kinogo, alloha, rezka, vibix, zona) обходят защиту источников через headless-браузер: открывают страницу с включённым JS, перехватывают сетевые запросы и подменяют ответы. Раньше этим занимался единственный движок chromedp; теперь можно выбрать из трёх.

Управление — в админ-панели, вкладка «Браузерный пул» → блок «🧩 Движок браузера».

Доступные движки

ДвижокПо умолчаниюЗависимостиКогда использовать
chromedp✅ ДаСистемный Chrome / ChromiumСтандарт — стабильный, проверенный годами
rod✅ ДаСвой Chromium (авто-загрузка ~140 МБ при первом использовании)Современный API, хороший stealth, меньше памяти
playwright❌ Только в спец-сборкеNode.js + Chromium через установщикЛучший trace-viewer, поддержка WebKit/Firefox, если нужны для антидетекта
Сборка: дефолтный бинарь содержит chromedp + rod. Чтобы получить Playwright, нужна сборка go build -tags playwright — образ становится тяжелее на ~10 МБ.

Глобальная настройка

В админ-панели → «Браузерный пул» → выпадающий список «По умолчанию»:

  • chromedp — стандарт, не требует ничего
  • rod — при первом использовании сам скачает Chromium в ~/.cache/rod
  • playwright — если опция показывается с пометкой (недоступно), рядом появится кнопка «Установить». Нажатие запускает загрузку (~150 МБ), сервер блокируется на время скачивания, потом опция становится доступной.

Применить → «Применить» под выпадающим списком. Новые резолвы пойдут через выбранный движок, активные сессии доигрывают на старом без обрыва.

Переопределения по балансерам

Развернуть блок «Переопределения по балансерам» — таблица 9 источников с выбором движка для каждого:

mirage      [— как глобальный —] [chromedp] [rod] [playwright]
kinobase    [— как глобальный —] [chromedp] [rod] [playwright]
turbo       …
…

Применять можно точечно — например, kinobase = rod, остальное оставить на chromedp. Полезно при тестах нового движка на одном источнике без риска для остальных.

Сохраняется в database/browser_engine.json (atomic write, переживает рестарт).

Stealth-защита

Все три движка поддерживают опцию UseStealth — инъектит JS-патчи поверх каждой страницы:

  • navigator.webdriver = false
  • window.chrome.runtime / chrome.app / chrome.csi / chrome.loadTimes
  • navigator.plugins (правдоподобный PluginArray)
  • navigator.permissions.query
  • navigator.languages / navigator.hardwareConcurrency
  • WebGL.UNMASKED_VENDOR / RENDERER
  • iframe.contentWindow, media.codecs, console.debug, sourceurl

Покрытие — те же 16 техник что в puppeteer-extra-plugin-stealth, упакованные через go-rod/stealth.

Stealth обходит fingerprint-проверки (sannysoft, basic bot mode). НЕ обходит Cloudflare JS-challenge или Turnstile — там по-прежнему нужен FlareSolverr или residential SOCKS5.

Для mirage stealth-патчи мы наслаиваем: сначала общий stealth.JS (16 техник), потом самописный mirageStealthJS (специфичные подмены поверх).

SOCKS5

Каждый балансер может использовать собственный SOCKS5 — это задаётся в админке «Проксирование», независимо от движка. Все три движка пробрасывают SOCKS5 в Chromium через --proxy-server=socks5://....

Ограничение Chromium: флаг --proxy-server не понимает inline-auth (user:pass@host:port). Если ваш SOCKS5 требует логин — поднимите локальный no-auth форвардер (например gost -L socks5://:8080 -F socks5://user:pass@upstream:1080) и укажите его в балансере.

Когда переключать движки

СимптомПопробовать
kinobase: «Видео недоступно для просмотра в вашей стране»Включить SOCKS5 на российский IP; движок не поможет
mirage: 4K играет 4 минуты, потом 500 от CDNЭто CDN-кулдаун, не движок — re-resolve по таймеру решает
Любой источник: connection refused / timeoutПроверьте chromium-browser в PATH (для chromedp) или установите rod (он сам качает)
playwright: not available в админкеНажмите кнопку «Установить» рядом — скачает Chromium + Node-драйвер
Подозрение на antibot fingerprintВключите UseStealth (по умолчанию ВКЛ для mirage и kinobase)

Поведение при переключении

  • Изменение default-движка через админку не убивает активные браузер-сессии. Старые продолжают резолвить на старом движке, новые — на новом.
  • Если выбранный движок недоступен (например, выбрали playwright но не установили) — система молча fallback’нется на chromedp. В логах появится предупреждение browser: engine ... unavailable, falling back to default.
  • Полный рестарт lampac не требуется.

Файлы состояния

ПутьСодержимое
database/browser_engine.jsonТекущий выбор движка (global + per-balancer overrides). Atomic write.
~/.cache/rodChromium для rod (~140 МБ). Можно удалить — скачает заново.
~/.cache/ms-playwrightДрайвер + Chromium для Playwright (~200 МБ). Аналогично.

Диагностика

# Какой движок реально работает (видно в логах)
journalctl -u lampac | grep -i "browser: engine"

# Принудительный сброс выбора (применится дефолт из config.toml)
rm /opt/lampac/database/browser_engine.json
systemctl reload lampac

# Сброс кэша rod (если зависает на старте)
rm -rf ~/.cache/rod

В админ-панели рядом с каждым недоступным движком пишется конкретная ошибка — rod: launcher: download failed, playwright: driver not installed и т.д.

Опции в config.toml

Если хочется задать дефолт через файл (вместо админки):

[browser_pool]
engine = "rod"                     # глобальный движок
max_concurrent = 8                 # одновременных сессий

[browser_pool.balancer_engines]
mirage   = "chromedp"
kinobase = "rod"

Админский выбор database/browser_engine.json переопределяет значения из TOML. Чтобы передать управление обратно конфигу — удалите файл.