Puppeteer — это библиотека для Node.js, позволяющая управлять браузером Chromium через API высокого уровня. Основной механизм взаимодействия с браузером строится через domains (домены) и методы, относящиеся к этим доменам. Домены представляют собой логические группы команд и событий, которые браузер поддерживает через протокол DevTools (CDP — Chrome DevTools Protocol).
Каждый домен в Puppeteer отвечает за определённую область функциональности браузера. Например:
Каждый домен предоставляет методы для выполнения действий и события для подписки на изменения состояния.
Методы домена Page позволяют полностью управлять поведением страницы:
page.goto(url, options) — навигация на
указанный URL. Поддерживает опции waitUntil для ожидания
загрузки: ‘load’, ‘domcontentloaded’,
‘networkidle0’, ‘networkidle2’.
page.setViewport(viewport) — установка
размеров окна браузера (width, height,
deviceScaleFactor).
page.evaluate(fn, …args) — выполнение
JavaScript на странице, возвращает результат. Позволяет работать с DOM и
логикой страницы напрямую.
page.screenshot(options) — создание
скриншотов, поддерживает форматы PNG и JPEG, возможность указать область
(clip) и качество.
page.pdf(options) — генерация PDF страницы
с настройками формата, полей и ориентации.
Методы Page поддерживают асинхронное выполнение, что позволяет
комбинировать их с await для точного контроля над
процессом.
Домен Network отвечает за мониторинг и управление HTTP-запросами:
page.setRequestInterception(true) —
включение перехвата сетевых запросов.
page.on(‘request’, handler) — событие для
перехвата запросов, можно модифицировать или блокировать.
page.on(‘response’, handler) — событие для
обработки ответов, получение статуса, заголовков и тела ответа.
Использование Network важно для тестирования производительности, проверки корректности API и эмуляции условий сети.
Домен DOM позволяет работать с элементами страницы через селекторы:
page.(selector) < /code > < /strong > —поискпервогоэлементапоCSS − селектору, возвращаетобъект < code > ElementHandle < /code > . < /li > < li > < strong > < code > page.$(selector)
— поиск всех элементов по CSS-селектору, возвращает массив
ElementHandle.
elementHandle.click(),
elementHandle.type(text) — взаимодействие
с элементами.
page.waitForSelector(selector, options) —
ожидание появления элемента на странице, полезно для динамического
контента.
DOM-методы особенно важны для тестирования интерфейсов и проверки визуальных компонентов.
Домен Runtime используется для работы с JS-кодом и объектами страницы:
page.evaluateHandle(fn, …args) —
возвращает объект JavaScript (JSHandle) для последующего
взаимодействия.
jsHandle.jsonValue() — получение значения
объекта, находящегося на странице.
page.exposeFunction(name, fn) —
регистрация функции Node.js, доступной в браузерном контексте.
Runtime позволяет интегрировать Node.js-логику с клиентским кодом, упрощая тестирование сложных сценариев.
Домен Target управляет вкладками и окнами браузера:
browser.newPage() — создание новой
вкладки.
page.close() — закрытие текущей страницы.
browser.pages() — получение списка всех
открытых страниц.
page.target() — получение объекта Target
для текущей страницы.
Target-методы позволяют тестировать многовкладочные сценарии и контролировать жизненный цикл браузера.
Домены не изолированы, их методы можно комбинировать для сложных сценариев:
Такой подход позволяет строить полностью автоматизированные тесты с контролем каждого аспекта поведения браузера.
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 800 });
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
await page.screenshot({ path: 'example.png' });
const heading = await page.$eval('h1', el => el.textContent);
console.log('Heading:', heading);
await browser.close();
})();
В примере показано сочетание методов Page, DOM и Target: навигация, скриншот, получение текста элемента и работа с вкладкой браузера.
Использование доменов и их методов обеспечивает гибкость и масштабируемость автоматизированного тестирования.