Браузерный движок
Некоторые балансеры (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, если нужны для антидетекта |
go build -tags playwright — образ становится тяжелее на ~10 МБ.Глобальная настройка
В админ-панели → «Браузерный пул» → выпадающий список «По умолчанию»:
chromedp— стандарт, не требует ничегоrod— при первом использовании сам скачает Chromium в~/.cache/rodplaywright— если опция показывается с пометкой(недоступно), рядом появится кнопка «Установить». Нажатие запускает загрузку (~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 = falsewindow.chrome.runtime/chrome.app/chrome.csi/chrome.loadTimesnavigator.plugins(правдоподобный PluginArray)navigator.permissions.querynavigator.languages/navigator.hardwareConcurrencyWebGL.UNMASKED_VENDOR/RENDERERiframe.contentWindow,media.codecs,console.debug,sourceurl
Покрытие — те же 16 техник что в puppeteer-extra-plugin-stealth, упакованные через go-rod/stealth.
Для 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/rod | Chromium для 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. Чтобы передать управление обратно конфигу — удалите файл.