URL запуска Browserless: не кодируйте параметр launch дважды
Используйте интерфейс launch собственного развёртывания; externalProxyServer — отдельная функция хостингового сервиса.
const endpoint = new URL(browserlessWebSocketEndpoint);
endpoint.searchParams.set('token', browserlessToken);
endpoint.searchParams.set('launch', JSON.stringify({
args: ['--proxy-server=http://proxy.example:8080'],
}));
const browser = await puppeteer.connect({
browserWSEndpoint: endpoint.toString(),
});Используйте выданные для развёртывания адрес ws/wss и токен. Хост браузера должен иметь доступ к HTTP-слушателю; этот токен аутентифицирует управляющее соединение. Для разрешённого просмотра публичных страниц кандидат из списка HTTP-прокси может заполнить флаг запуска без аутентификации.
JSON.stringify сериализует объект launch, затем URLSearchParams кодирует его для URL. Если передать в searchParams текст, уже обработанный encodeURIComponent, его знаки процента будут закодированы повторно.
Этот флаг без аутентификации не передаёт учётные данные Chromium с именем пользователя и паролем. При необходимости используйте поддерживаемую обработку запросов аутентификации.
Интеграция externalProxyServer хостингового сервиса не является одноимённым полем объекта launch в каждом самостоятельно размещённом образе. Прежде чем искать проблему в учётной записи, сопоставьте развёртывание, версию образа и выбранный API.