Использование собственной установки браузера с Puppeteer
Puppeteer — это мощная библиотека для управления браузером Chrome или Chromium через протокол DevTools. Одной из особенностей Puppeteer является возможность настройки и использования собственного экземпляра браузера, что открывает дополнительные возможности для тестирования и автоматизации, а также позволяет учитывать особые требования к окружению.
В данной главе рассматривается, как настроить и использовать собственный браузер с Puppeteer, а также как работать с различными конфигурациями.
По умолчанию Puppeteer автоматически скачивает и использует версию Chromium, совместимую с библиотекой. Однако иногда бывает необходимо использовать уже установленную версию Chrome или другой браузер, отличающийся от стандартного Chromium.
Для этого необходимо указать путь к браузеру при запуске Puppeteer. В этом случае Puppeteer не будет скачивать Chromium, а будет работать с уже установленным браузером.
Чтобы использовать собственный браузер, нужно передать путь к
исполняемому файлу браузера в параметре executablePath при
запуске Puppeteer. Вот пример кода, который показывает, как это можно
сделать:
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome', // путь к вашему браузеру
headless: false // запускаем браузер в режиме с интерфейсом
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Ваши действия с страницей...
await browser.close();
})();
Для Windows путь к исполняемому файлу Chrome обычно выглядит как
C:\Program Files\Google\Chrome\Application\chrome.exe. На
MacOS это может быть /Applications/Google
Chrome.app/Contents/MacOS/Google Chrome, а на Linux —
/usr/bin/google-chrome или /usr/bin/chromium.
Если браузер не установлен в стандартном месте, можно найти его с помощью командной строки:
where chrome.
which
google-chrome или which chromium.
Puppeteer предоставляет множество настроек, которые можно использовать при запуске браузера. Помимо указания пути к исполняемому файлу, есть еще несколько важных параметров, которые могут быть полезны при настройке.
headless: режим без графического интерфейса. По умолчанию он включен, но для использования с собственным браузером его можно отключить. Это позволит запускать браузер с графическим интерфейсом.
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome',
headless: false // Запуск с интерфейсом
});
args: параметр, позволяющий передать дополнительные аргументы запуска браузера, например, указание конкретного профиля пользователя или настройка прокси.
Пример использования:
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome',
args: ['--no-sandbox', '--disable-setuid-sandbox'] // Дополнительные параметры
});
userDataDir: позволяет указать папку для хранения пользовательских данных (например, куки, локальное хранилище). Это особенно полезно для запуска браузера с сохранением сессий или при тестировании функциональности, связанной с авторизацией.
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome',
userDataDir: '/path/to/custom/profile' // Папка для пользовательских данных
});
defaultViewport: позволяет задать размер экрана, который будет использоваться в браузере. Это может быть полезно для тестирования адаптивных веб-страниц.
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome',
defaultViewport: {
width: 1280,
height: 800
}
});
При использовании собственного браузера стоит учитывать несколько важных моментов:
Совместимость версий: Puppeteer ориентирован на определенную версию Chromium, и при использовании другого браузера могут возникнуть проблемы с совместимостью. В некоторых случаях потребуется использовать более специфичные настройки или проверку версий.
Браузерные плагины и расширения: При использовании
собственного браузера можно добавить расширения для тестирования
функциональности плагинов или анализа работы с ними. Для этого можно
передавать параметры в args для указания каталога с
расширениями:
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome',
args: ['--load-extension=/path/to/your/extension']
});
Управление сессиями: С использованием собственного браузера легче контролировать состояние сессий и работать с профилями, сохраняя данные между тестами или тестируя разные сценарии с различными пользовательскими данными.
Для некоторых типов тестов может потребоваться использование
прокси-сервера, чтобы контролировать сетевой трафик или обеспечить
анонимность. Puppeteer поддерживает настройку прокси-серверов через
параметр args.
Пример настройки прокси:
const browser = await puppeteer.launch({
executablePath: '/path/to/your/chrome',
args: ['--proxy-server=http://myproxy:8080']
});
Это позволяет направлять весь трафик через указанный сервер и полезно при тестировании сетевых операций, которые могут зависеть от местоположения или сети.
Puppeteer поддерживает использование не только Chromium, но и других браузеров, совместимых с протоколом DevTools. Это открывает возможность использовать его не только с Chrome, но и с другими версиями браузеров, такими как Firefox, Opera и другими.
Для этого потребуется указать путь к соответствующему исполняемому файлу браузера и настроить запуск с учетом особенностей каждого браузера.
В случае с Firefox, например, необходимо использовать специальную сборку Puppeteer, поддерживающую Firefox, так как стандартная версия Puppeteer предназначена только для Chromium.
Иногда возникает необходимость параллельно использовать несколько экземпляров браузеров, например, для многозадачности или тестирования на нескольких устройствах. Puppeteer позволяет запускать несколько браузеров одновременно, создавая независимые сессии и работая с ними параллельно.
Пример кода для запуска нескольких экземпляров:
const browser1 = await puppeteer.launch({ executablePath: '/path/to/your/chrome' });
const browser2 = await puppeteer.launch({ executablePath: '/path/to/your/chrome' });
const page1 = await browser1.newPage();
await page1.goto('https://example1.com');
const page2 = await browser2.newPage();
await page2.goto('https://example2.com');
// Ваши действия с каждой страницей...
await browser1.close();
await browser2.close();
Использование собственного экземпляра браузера с Puppeteer предоставляет гибкость и дополнительные возможности для настройки окружения. Это может быть полезно в различных сценариях тестирования, где необходимо учитывать специфичные настройки браузера или использовать нестандартные версии. Конфигурация Puppeteer под собственный браузер позволяет управлять его параметрами, включая прокси-серверы, расширения и профили пользователя, что открывает широкие возможности для автоматизации и тестирования.