Puppeteer — это библиотека для управления браузером Chrome или Chromium через протокол DevTools. Для работы с ней в проекте на Node.js необходимо добавить зависимость через npm или yarn:
npm install puppeteer
yarn add puppeteer
После установки подключение выполняется стандартным require
или import:
const puppeteer = require('puppeteer');
// или с использованием ES-модулей
import puppeteer from 'puppeteer';
Важно понимать, что Puppeteer поставляется с собственной версией Chromium, что делает установку достаточно тяжёлой, но гарантирует совместимость с API.
Для стабильности тестов необходимо контролировать версии Puppeteer и
браузера. Рекомендуется фиксировать версию в package.json:
"dependencies": {
"puppeteer": "21.3.0"
}
Использование тегов вроде ^ может привести к неожиданным
несовместимостям с API при обновлении. Для специфических проектов
возможно подключение внешнего браузера:
const browser = await puppeteer.launch({
executablePath: '/usr/bin/google-chrome-stable'
});
Это позволяет использовать системный Chrome вместо встроенного Chromium и управлять окружением более гибко.
Puppeteer часто используется вместе с Jest, Mocha или другими тестовыми фреймворками. Для корректной работы необходимо учитывать совместимость пакетов и версий:
npm install jest jest-environment-puppeteer
При этом создается отдельная среда
jest-environment-puppeteer, которая автоматически запускает
браузер и предоставляет глобальные объекты page и
browser.
Для больших проектов рекомендуется структурировать зависимости следующим образом:
dotenv для работы с конфигурацией, fs-extra
для файловых операций.
Пример структуры package.json:
{
"dependencies": {
"puppeteer": "21.3.0",
"dotenv": "^16.0.0"
},
"devDependencies": {
"jest": "^29.5.0",
"jest-environment-puppeteer": "^8.0.0"
}
}
TypeScript требует наличия типов. Для Puppeteer типы встроены, но иногда нужны дополнительные:
npm install --save-dev @types/jest
Файл конфигурации tsconfig.json должен включать:
{
"compilerOptions": {
"strict": true,
"esModuleInterop": true,
"moduleResolution": "node",
"target": "ES2020"
}
}
Для корректной интеграции тестов с Puppeteer необходимо указать соответствующую среду:
"jest": {
"preset": "jest-puppeteer"
}
Тесты Puppeteer чувствительны к версии браузера и Node.js. Рекомендуется
фиксировать версии через engines в
package.json:
"engines": {
"node": ">=18.0.0 <20.0.0"
}
Использование nvm или аналогов позволяет легко переключать версии Node.js и поддерживать консистентное окружение на всех машинах.
Для ускорения установки и уменьшения веса проекта можно использовать
puppeteer-core, который не включает Chromium по умолчанию:
npm install puppeteer-core
В этом случае необходимо указывать путь к браузеру:
const browser = await puppeteer.launch({
executablePath: process.env.CHROME_PATH
});
Подход позволяет интегрироваться с CI/CD системами и управлять кэшированием браузеров.
Корректное управление зависимостями в проектах с Puppeteer обеспечивает
стабильность тестов, упрощает настройку CI/CD и облегчает
масштабирование проектов. Ключевые практики включают фиксацию версий,
разделение production и dev зависимостей, использование
puppeteer-core для оптимизации и интеграцию с тестовыми
фреймворками через специальные среды.