Как запустить BAS Chromium с Puppeteer и сделать UI видимым
При попытке использовать браузер из проекта BAS (Browser Automation Studio) с библиотекой Puppeteer разработчики часто сталкиваются с проблемой: сам Chromium запускается, скриншоты создаются, но окно браузера остаётся невидимым. В этой статье мы разберём причины такого поведения и предложим рабочие решения.
Почему BAS Chromium не показывает UI при запуске через Puppeteer
BAS использует модифицированную сборку Chromium, которая оптимизирована для автоматизации. По умолчанию эта сборка может запускаться с флагами, подавляющими отображение графического интерфейса, даже если параметр headless: false явно указан. Основные причины:
- Специфические флаги BAS - в исполняемом файле могут быть жёстко зашиты аргументы, включающие невидимый режим.
- Конфликт параметров - некоторые флаги, переданные в
args, могут переопределять настройки отображения. - Отсутствие ключевого флага
--enable-gpu- на некоторых системах без него UI не рендерится.
Как исправить: пошаговая настройка Puppeteer для BAS Chromium
1. Проверьте путь к исполняемому файлу
Убедитесь, что executablePath указывает именно на worker.exe из папки BAS. Обычно это D:/BAS/chromium/chrome/worker.exe.
2. Минимизируйте кастомные аргументы
Начните с минимального набора флагов. Постепенно добавляйте только те, которые действительно нужны. Пример базовой конфигурации:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
executablePath: 'D:/chromium/chrome/worker.exe',
headless: false,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'test.png' });
await browser.close();
})();3. Добавьте флаг принудительного рендеринга
Если UI всё ещё не отображается, попробуйте добавить --enable-gpu и --disable-software-rasterizer:
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--enable-gpu',
'--disable-software-rasterizer'
]4. Используйте отладку через удалённый порт
Запустите браузер с флагом --remote-debugging-port=9222 и подключитесь к нему через puppeteer.connect(). Это иногда обходит внутренние ограничения BAS.
Альтернативное решение: используйте стандартный Chromium
Если BAS-сборка Chromium продолжает работать в невидимом режиме, рассмотрите вариант использования обычного Chromium, установленного через puppeteer или системного Chrome. Это гарантирует полный контроль над отображением UI.