Domains и методы

Puppeteer — это библиотека для Node.js, позволяющая управлять браузером Chromium через API высокого уровня. Основной механизм взаимодействия с браузером строится через domains (домены) и методы, относящиеся к этим доменам. Домены представляют собой логические группы команд и событий, которые браузер поддерживает через протокол DevTools (CDP — Chrome DevTools Protocol).


Домены (Domains)

Каждый домен в Puppeteer отвечает за определённую область функциональности браузера. Например:

  • Page — управление страницей: навигация, события, контент.
  • Network — контроль сетевых запросов и ответов.
  • DOM — работа с документом: элементы, селекторы, структура DOM.
  • Runtime — выполнение кода JavaScript на странице, работа с объектами в контексте страницы.
  • Target — управление вкладками и браузерными окнами.

Каждый домен предоставляет методы для выполнения действий и события для подписки на изменения состояния.


Методы домена Page

Методы домена 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

Домен Network отвечает за мониторинг и управление HTTP-запросами:

  • page.setRequestInterception(true) — включение перехвата сетевых запросов.
  • page.on(‘request’, handler) — событие для перехвата запросов, можно модифицировать или блокировать.
  • page.on(‘response’, handler) — событие для обработки ответов, получение статуса, заголовков и тела ответа.

Использование Network важно для тестирования производительности, проверки корректности API и эмуляции условий сети.


Методы домена DOM

Домен 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

Домен Runtime используется для работы с JS-кодом и объектами страницы:

  • page.evaluateHandle(fn, …args) — возвращает объект JavaScript (JSHandle) для последующего взаимодействия.
  • jsHandle.jsonValue() — получение значения объекта, находящегося на странице.
  • page.exposeFunction(name, fn) — регистрация функции Node.js, доступной в браузерном контексте.

Runtime позволяет интегрировать Node.js-логику с клиентским кодом, упрощая тестирование сложных сценариев.


Методы домена Target

Домен Target управляет вкладками и окнами браузера:

  • browser.newPage() — создание новой вкладки.
  • page.close() — закрытие текущей страницы.
  • browser.pages() — получение списка всех открытых страниц.
  • page.target() — получение объекта Target для текущей страницы.

Target-методы позволяют тестировать многовкладочные сценарии и контролировать жизненный цикл браузера.


Взаимодействие между доменами

Домены не изолированы, их методы можно комбинировать для сложных сценариев:

  • Перехват сетевых запросов и проверка DOM-элементов после загрузки страницы.
  • Выполнение кода через Runtime и последующее снятие скриншотов через Page.
  • Управление несколькими вкладками через 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: навигация, скриншот, получение текста элемента и работа с вкладкой браузера.


Ключевые моменты

  • Домены Puppeteer структурируют функциональность браузера по областям, каждая с набором методов и событий.
  • Асинхронная модель позволяет точно контролировать последовательность действий.
  • События и методы можно комбинировать для сложного тестирования UI, сетевых взаимодействий и динамического контента.
  • Runtime и DOM дают полный контроль над логикой страницы и её визуальной структурой.

Использование доменов и их методов обеспечивает гибкость и масштабируемость автоматизированного тестирования.