Открыть сервис

Puppeteer

Puppeteer — это библиотека с открытым исходным кодом для языка программирования JavaScript, предоставляющая высокоуровневый API для управления безголовым (headless) браузером Chromium или Chrome. Puppeteer разрабатывается и поддерживается компанией Google. Основное назначение библиотеки — автоматизация действий веб-браузера, что позволяет программно выполнять задачи, обычно требующие ручного взаимодействия пользователя: создание скриншотов, генерация PDF-файлов, тестирование веб-интерфейсов, парсинг (извлечение) данных и эмуляция действий пользователя.

Архитектура и принцип работы

Puppeteer работает по протоколу DevTools Protocol (CDP) — протоколу, который Google Chrome использует для взаимодействия с инструментами разработчика. Библиотека подключается к экземпляру браузера Chromium или Chrome (как к уже запущенному, так и к запущенному ею самой) и через CDP отправляет команды, управляющие вкладками, навигацией, рендерингом и вводом.

Компоненты

Режимы выполнения

Puppeteer может автоматически загружать и устанавливать версию Chromium, оптимизированную для работы с библиотекой (набор поставки включает Chromium под все основные платформы). Альтернативно, пользователь может подключиться к уже установленному браузеру с помощью puppeteer.launch({ executablePath: '...' }). Существует также обёртка puppeteer-core, которая не включает Chromium и подходит для подключения к существующим экземплярам.

История и развитие

Puppeteer был впервые анонсирован Google в июне 2017 года как часть набора инструментов для автоматизации тестирования и мониторинга веб-приложений. Основной причиной создания стала потребность в удобном и надёжном способе управления браузером с помощью JavaScript, в отличие от более старых решений на основе Selenium, которые часто были сложнее в настройке и медленнее.

В августе 2018 года вышла версия 1.8, которая добавила поддержку page.emulateNetworkConditions — симуляции различных сетевых условий. Версия 2.0 (май 2019) ввела экспериментальный API для работы с классом Worker — объектами Web Workers.

В январе 2020 года была выпущена версия 3.0, которая, среди прочего, изменила поведение page.waitFor и улучшила поддержку новых возможностей Chromium. Версия 5.0 (июнь 2020) стала знаковой — она принесла стабильную поддержку работы с фреймами и улучшения в обработке ошибок.

В 2022—2023 годах Puppeteer продолжал развиваться в сторону улучшения производительности и совместимости с новыми версиями Chromium. В версии 19.0 (сентябрь 2022) была добавлена сборка для Node.js 18 и выше, а также улучшена поддержка Workerd (среда выполнения Cloudflare Workers).

На 2024 год последней стабильной версией является Puppeteer 22.x. Библиотека активно поддерживается разработчиками Google и сообществом. Одновременно с этим конкуренцию Puppeteer составляет проект Playwright, разрабатываемый Microsoft и основанный на схожих принципах, но поддерживающий также Firefox и WebKit.

Функциональные возможности

Управление браузером

Puppeteer позволяет запускать браузер с множеством настроек: задавать размер окна, отключать/включать GPU-ускорение, устанавливать локали, отключать WebGL, шифрование и другие функции. Можно открывать несколько вкладок в одном браузере, создавать изолированные контексты и эмулировать различные устройства (экран iPhone, iPad и т. д.).

Работа со страницей

Через объект Page доступны:

Скриншоты и PDF

Одна из популярных функций — создание скриншотов видимой области страницы или всей страницы целиком (включая области, не помещающиеся в окно). Форматы: PNG, JPEG, WebP. Код поддерживает изменение разрешения, параметр fullPage: true для захвата полной высоты. Также библиотека позволяет генерировать PDF-документ из HTML-кода или текущей страницы с широкими настройками: размер бумаги, отступы, ориентация.

Эмуляция

Puppeteer позволяет эмулировать такие параметры, как:

Перехват сетевых запросов

С помощью page.setRequestInterception(true) можно перехватывать HTTP-запросы, изменять их, блокировать или отвечать на них собственными данными. Это позволяет:

Кластеры и параллельное выполнение

Для выполнения нескольких задач одновременно (например, краулинг сотен страниц) Puppeteer предоставляет модуль puppeteer-cluster. Он управляет пулом браузеров или страниц, распределяя между ними задачи и ограничивая одновременное количество процессов.

Автоматическое тестирование

Puppeteer интегрируется с тестовыми фреймворками (Jest, Mocha, Jasmine). На его основе написаны популярные инструменты для скриншотного тестирования (jest-image-snapshot) и сквозного (end-to-end) тестирования.

Применение

Веб-скрапинг (парсинг)

Puppeteer широко используется для сбора данных с динамических сайтов (Single Page Applications, SPA), которые генерируют контент с помощью JavaScript. Обычный HTTP-запрос не возвращает готовую HTML-разметку, тогда как Puppeteer запускает браузер, выполняет весь JavaScript и отдаёт результирующий DOM. Это делает его эффективным инструментом для краулинга и парсинга. Применяется, например, для отслеживания цен конкурентов, сбора новостей, мониторинга изменений на сайтах.

Тестирование веб-приложений

Puppeteer позволяет писать автоматизированные тесты пользовательских сценариев (регистрация, оформление заказа, поиск). Он может генерировать отчеты в формате JUnit, записывать видео выполнения тестов, делать скриншоты для визуального сравнения. Основное преимущество — скорость выполнения и точность эмуляции действий реального пользователя.

Генерация PDF-документов

Генерация PDF-документов из HTML-шаблонов — востребованный сценарий для создания отчётов, счетов, документов с сохранением вёрстки, шрифтов и стилей. Puppeteer обеспечивает высокую точность рендеринга, что выгодно отличает его от серверных решений вроде wkhtmltopdf.

Мониторинг и краулинг

Puppeteer используется в инструментах мониторинга веб-сайтов (например, Lighthouse CI). Роботы, построенные на его основе, могут проверять производительность сайта, доступность ресурсов, верстку, корректность работы JavaScript. Также его применяют для индексации сайтов поисковыми системами (Googlebot на базе Chromium использует аналогичные механизмы).

Решение Google Puppeteer

Google использует Puppeteer в своих внутренних проектах, включая инструменты тестирования Chrome DevTools и Lighthouse — систему для аудита качества веб-приложений.

Ограничения и недостатки

Безопасность и этические аспекты

Puppeteer, как и любой инструмент автоматизации, может использоваться для недобросовестного сбора данных, обхода капч, DDoS-атак или взлома веб-систем. Большинство веб-сайтов запрещают автоматизированный сбор данных (скрейпинг) в пользовательском соглашении. Puppeteer предоставляет методы для эмуляции человеческого поведения (задержки, паузы, случайные движения мыши), но это не делает его законным инструментом для обхода ограничений. Применение Puppeteer для краулинга должно соответствовать законодательству страны и правилам целевого веб-сайта.

Примеры использования (код)

Базовый скриншот

``javascript const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({ path: 'example.png' }); await browser.close(); })(); ``

Извлечение текста

``javascript const text = await page.evaluate(() => document.title); ``

Эмуляция устройства

``javascript const iPhone = puppeteer.devices['iPhone 11']; await page.emulate(iPhone); ``

Варианты и производные проекты

Литература и документация

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →