====== Кукловодческая документация ======
===== Overview =====
Кукловод-это библиотека Node,предоставляющая высокоуровневый API для управления Chromium или Chrome по протоколу DevTools.
Кукловодный API является иерархическим и отражает структуру браузера.
> **ПРИМЕЧАНИЕ** На следующей диаграмме выцветшие объекты в настоящее время не представлены в Puppeteer.
{{:nodejs:библиотеки:puppeteer:2.png?600x600|}}
* ''[[#class-puppeteer|Puppeteer]]'' общается с браузером с[[https://chromedevtools.github.io/devtools-protocol/|помощью протокола DevTools]] .
* ''[[#class-browser|Browser]]'' Экземпляр браузера может владеть несколькими контекстами браузера.
* ''[[#class-browsercontext|BrowserContext]]'' Экземпляр BrowserContext определяет сеанс просмотра и может владеть несколькими страницами.
* ''[[#class-page|Page]]'' имеет хотя бы один фрейм: основной фрейм. Могут быть и другие фреймы, созданныетегами[[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe|iframe]] или[[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame|frame]] .
* ''[[#class-frame|Frame]]'' имеет по крайней мере один контекст выполнения - контекст выполнения по умолчанию, в котором выполняется JavaScript фрейма. Фрейм может иметь дополнительные контексты выполнения, связанные с[[https://developer.chrome.com/extensions|расширениями]] .
* ''[[#class-worker|Worker]]'' имеет единый контекст выполнения и облегчает взаимодействие с[[https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API|WebWorkers]] .
(Источник схемы: [[https://docs.google.com/drawings/d/1Q_AM6KYs9kbyLZF-Lpp5mtpAWth73Cq8IKCsWYgi8MM/edit?usp=sharing|ссылка]] )
===== кукловод против кукловода-ядро =====
В каждом выпуске начиная с версии 1.7.0 мы публикуем два пакета:
* [[https://www.npmjs.com/package/puppeteer|puppeteer]]
* [[https://www.npmjs.com/package/puppeteer-core|puppeteer-core]]
''puppeteer'' - это продукт для автоматизации браузера. После установки он загружает версию Chromium, которую затем запускает с помощью ''puppeteer-core'' . Являясь продуктом для конечного пользователя, ''puppeteer'' поддерживает набор удобных переменных ''PUPPETEER%%_*%%'' env для настройки его поведения.
''puppeteer-core'' - это библиотека, которая помогает управлять всем, что поддерживает протокол DevTools. ''puppeteer-core'' не загружает Chromium при установке. Будучи библиотекой, ''puppeteer-core'' полностью управляется своим программным интерфейсом и игнорирует все переменные ''PUPPETEER%%_*%%'' env.
Подводя итог, единственные различия между ''puppeteer-core'' ''puppeteer'' и кукловодом заключаются в следующем:
* ''puppeteer-core'' не загружает Chromium автоматически при установке.
* ''puppeteer-core'' игнорирует все переменные ''PUPPETEER%%_*%%'' env.
В большинстве случаев вы будете в порядке с пакетом ''puppeteer'' .
Однако вы должны использовать ''puppeteer-core'' если:
* вы создаете другой продукт или библиотеку для конечных пользователей на основе протокола DevTools. Например, можно создать генератор PDF ''puppeteer-core'' файлов с использованием puppeteer-core и написать собственный сценарий ''install.js'' , который загружает ''[[https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md|headless_shell]]'' вместо Chromium для экономии места на диске.
* вы связываете Puppeteer для использования в Chrome Extension/браузер с протоколом DevTools,где загрузка дополнительного двоичного Chromium ненужна.
* вы создаете набор инструментов, одним из компонентов которого является ''puppeteer-core'' , и вы хотите отложить выполнение скрипта ''install.js'' до тех пор, пока не будет использован Chromium.
При использовании ''puppeteer-core'' не забудьте изменить строку include :
const puppeteer = require('puppeteer-core');
Затем вам нужно будет вызвать ''[[#puppeteerconnectoptions|puppeteer.connect([options])]]'' или ''[[#puppeteerlaunchoptions|puppeteer.launch([options])]]'' с явной опцией ''executablePath'' .
===== Переменные среды =====
Кукловод ищет определенные [[https://en.wikipedia.org/wiki/Environment_variable|переменные среды,]] чтобы помочь в его работе. Если Puppeteer не находит их в среде на этапе установки, будет использоваться вариант этих переменных в нижнем регистре из [[https://docs.npmjs.com/cli/config|конфигурации npm]] .
* ''HTTP_PROXY'' , ''HTTPS_PROXY'' , ''NO_PROXY'' - определяет настройки прокси HTTP, которые используются для загрузки и запуска Chromium.
* ''PUPPETEER_SKIP_CHROMIUM_DOWNLOAD'' - не загружать Chromium в комплекте на этапе установки.
* ''PUPPETEER_DOWNLOAD_HOST'' - перезаписать префикс URL-адреса, который используется для загрузки Chromium. Примечание: это включает протокол и может даже включать префикс пути. По умолчанию ''https://storage.googleapis.com'' .
* ''PUPPETEER_DOWNLOAD_PATH'' - перезаписать путь к папке загрузок. По умолчанию ''/.local-chromium'' , где '''' - корень пакета кукловода.
* ''PUPPETEER_CHROMIUM_REVISION'' - укажите определенную версию Chromium, которую вы хотите использовать в Puppeteer. См. [[#puppeteerlaunchoptions|Puppeteer.launch ([параметры])]] о том, как определяется путь к исполняемому файлу. **ВНИМАНИЕ** : Puppeteer [[https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy|гарантированно работает только]] с поставляемым Chromium, используйте его на свой страх и риск.
* ''PUPPETEER_EXECUTABLE_PATH'' - укажите путь к исполняемому файлу, который будет использоваться в ''puppeteer.launch'' . См. [[#puppeteerlaunchoptions|Puppeteer.launch ([параметры])]] о том, как определяется путь к исполняемому файлу. **ВНИМАНИЕ** : Puppeteer [[https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy|гарантированно работает только]] с поставляемым Chromium, используйте его на свой страх и риск.
* ''PUPPETEER_PRODUCT'' - укажите, какой браузер вы хотите использовать в Puppeteer. Должен быть ''chrome'' или ''firefox'' . Это также можно использовать во время установки для получения рекомендованного двоичного файла браузера. Программная установка ''product'' в [[#puppeteerlaunchoptions|puppeteer.launch ([options])]] заменяет эту переменную среды. Товар выставлен в ''[[#puppeteerproduct|puppeteer.product]]''
> **ПРИМЕЧАНИЕ.** Переменные env PUPPETEER_ * не учитываются в пакете ''[[https://www.npmjs.com/package/puppeteer-core|puppeteer-core]]'' .
===== Работа с хромированными удлинителями =====
Кукловод может быть использован для тестирования хромированных удлинителей.
> **ПРИМЕЧАНИЕ.** Расширения в Chrome / Chromium в настоящее время работают только в режиме без головы.
Ниже приведен код для получения дескриптора [[https://developer.chrome.com/extensions/background_pages|фоновой страницы]] расширения, источник которого находится в ''./my-extension'' :
const puppeteer = require('puppeteer');
(async () => {
const pathToExtension = require('path').join(__dirname, 'my-extension');
const browser = await puppeteer.launch({
headless: false,
args: [
`--disable-extensions-except=${pathToExtension}`,
`--load-extension=${pathToExtension}`
]
});
const targets = await browser.targets();
const backgroundPageTarget = targets.find(target => target.type() === 'background_page');
const backgroundPage = await backgroundPageTarget.page();
// Тестируем фоновую страницу так же, как и любую другую страницу.
await browser.close();
})();
> **ПРИМЕЧАНИЕ.** Пока невозможно протестировать всплывающие окна расширений или сценарии содержимого.
===== Класс:Кукловод =====
Модуль "Кукловод" предоставляет способ запуска экземпляра Chromium.Ниже приведен типичный пример использования кукловода для автоматизации:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.google.com');
// другие действия...
await browser.close();
})();
==== puppeteer.clearCustomQueryHandlers() ====
Очищает все зарегистрированные обработчики.
==== puppeteer.connect(options) ====
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] >
* ''browserWSEndpoint'' %%%% [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] %%>%% [[#browserwsendpoint|конечная точка веб-сокета браузера]] для подключения.
* ''browserURL'' %%%% [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] %%>%% URL-адрес браузера, к которому нужно подключиться, в формате ''%%http://${host}:${port}%%'' . Используйте взаимозаменяемо с ''browserWSEndpoint'' , чтобы позволить Puppeteer получить его из [[https://chromedevtools.github.io/devtools-protocol/#how-do-i-access-the-browser-target|конечной точки метаданных]] .
* ''ignoreHTTPSErrors'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Следует ли игнорировать ошибки HTTPS во время навигации. По умолчанию - ''false'' .
* ''defaultViewport'' %%%% [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] %%>%% Устанавливает согласованное окно просмотра для каждой страницы. По умолчанию используется область просмотра 800x600. ''null'' отключает область просмотра по умолчанию.
* ''width'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > ширина страницы в пикселях.
* ''height'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > высота страницы в пикселях.
* ''deviceScaleFactor'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Определяет масштабный коэффициент устройства (можно рассматривать как dpr). По умолчанию ''1'' .
* ''isMobile'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Учитывается ли ''meta viewport'' . По умолчанию - ''false'' .
* ''hasTouch'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Указывает, поддерживает ли область просмотра события касания. По умолчанию ''false''
* ''isLandscape'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Указывает, находится ли область просмотра в альбомном режиме. По умолчанию - ''false'' .
* ''slowMo'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Замедляет операции Puppeteer на указанное количество миллисекунд. Полезно, чтобы вы могли видеть, что происходит.
* ''transport'' < [[https://github.com/puppeteer/puppeteer/blob/v7.1.0/src/WebSocketTransport.js|ConnectionTransport]] > **Experimental** Укажите пользовательский объект транспорта, который будет использовать Puppeteer.
* ''product'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Возможные значения: ''chrome'' , ''firefox'' . По умолчанию ''chrome'' .
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[#class-browser|Browser]] >>
Этот метод присоединяет Puppeteer к существующему экземпляру браузера.
==== puppeteer.createBrowserFetcher%%([%%options]) ====
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] >
* ''host'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Используемый хост загрузки. По умолчанию ''https://storage.googleapis.com'' . Если ''product'' является ''firefox'' , это по умолчанию ''https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla- central'' .
* ''path'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Путь к папке загрузок. По умолчанию ''/.local-chromium'' , где '''' - корень пакета кукловода. Если ''product'' - ''firefox'' , по умолчанию используется ''/.local-firefox'' .
* ''platform'' <"linux" | "mac" | "win32" | "win64"> [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] для текущей платформы. Возможные значения: ''mac'' , ''win32'' , ''win64'' , ''linux'' . По умолчанию используется текущая платформа.
* ''product'' <"chrome" | "firefox"> [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] для запуска продукта. Возможные значения: ''chrome'' , ''firefox'' . По умолчанию ''chrome'' .
* возвращает: < [[#class-browserfetcher|BrowserFetcher]] >
==== puppeteer.customQueryHandlerNames() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] > Список с именами всех зарегистрированных обработчиков пользовательских запросов.
==== puppeteer.defaultArgs%%([%%options]) ====
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] > Набор настраиваемых параметров для настройки в браузере. Могут иметь следующие поля:
* ''headless'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Следует ли запускать браузер в [[https://developers.google.com/web/updates/2017/04/headless-chrome|автономном режиме]] . По умолчанию ''true'' , если опция ''devtools'' не ''true'' .
* ''args'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >> Дополнительные аргументы для передачи экземпляру браузера. Список флагов Chromium можно найти [[http://peter.sh/experiments/chromium-command-line-switches/|здесь]] .
* ''userDataDir'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Путь к каталогу [[https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md|пользовательских данных]] .
* ''devtools'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Следует ли автоматически открывать панель DevTools для каждой вкладки. Если эта опция ''true'' , опция ''headless'' будет установлена ''false'' .
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Массив]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] >>
Флаги по умолчанию,с которыми будет запущен Chromium.
==== puppeteer.devices ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] >
Возвращает список устройств, которые будут использоваться с ''[[#pageemulateoptions|page.emulate(options)]]'' . Актуальный список устройств можно найти в ''[[https://github.com/puppeteer/puppeteer/blob/main/src/common/DeviceDescriptors.ts|src/common/DeviceDescriptors.ts]]'' .
const puppeteer = require('puppeteer');
const iPhone = puppeteer.devices['iPhone 6'];
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.emulate(iPhone);
await page.goto('https://www.google.com');
// другие действия...
await browser.close();
})();
==== puppeteer.errors ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] >
* ''TimeoutError'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function|функция]] > Класс [[#class-timeouterror|TimeoutError]] .
Методы кукловода могут вызывать ошибки, если они не могут выполнить запрос. Например, [[#pagewaitforselectorselector-options|page.waitForSelector (selector [, options])]] может завершиться ошибкой, если селектор не соответствует ни одному узлу в течение заданного периода времени.
Для определенных типов ошибок Puppeteer использует определенные классы ошибок. Эти классы доступны через ''[[#puppeteererrors|puppeteer.errors]]''[[#puppeteererrors| .]]
Пример обработки ошибки таймаута:
try {
await page.waitForSelector('.foo');
} catch (e) {
if (e instanceof puppeteer.errors.TimeoutError) {
// Do something if this is a timeout.
}
}
> **ПРИМЕЧАНИЕ** Старый способ (версии Puppeteer <= v1.14.0) можно получить с помощью ''require%%('%%puppeteer/Errors')'' .
==== puppeteer.executablePath() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Путь, по которому Puppeteer ожидает найти связанный браузер. Двоичный файл браузера может отсутствовать, если загрузка была пропущена с помощью ''[[#environment-variables|PUPPETEER_SKIP_DOWNLOAD]]'' .
> **ПРИМЕЧАНИЕ. На** ''puppeteer.executablePath()'' влияют переменные ''PUPPETEER_EXECUTABLE_PATH'' и ''PUPPETEER_CHROMIUM_REVISION'' . См. Подробности в разделе « [[#environment-variables|Переменные среды»]] .
==== puppeteer.launch%%([%%options]) ====
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] > Набор настраиваемых параметров для настройки в браузере. Могут иметь следующие поля:
* ''product'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Какой браузер запускать. На данный момент это либо ''chrome'' либо ''firefox'' . См. Также ''PUPPETEER_PRODUCT'' .
* ''ignoreHTTPSErrors'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Следует ли игнорировать ошибки HTTPS во время навигации. По умолчанию - ''false'' .
* ''headless'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Следует ли запускать браузер в [[https://developers.google.com/web/updates/2017/04/headless-chrome|автономном режиме]] . По умолчанию ''true'' , если опция ''devtools'' не ''true'' .
* ''executablePath'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Путь к исполняемому файлу браузера, который нужно запустить вместо связанного Chromium. Если ''executablePath'' путь является относительным путем, он разрешается относительно [[https://nodejs.org/api/process.html#process_process_cwd|текущего рабочего каталога]] . **ВНИМАНИЕ** : Puppeteer [[https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy|гарантированно работает только]] с поставляемым Chromium, используйте его на свой страх и риск.
* ''slowMo'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Замедляет операции Puppeteer на указанное количество миллисекунд. Полезно, чтобы вы могли видеть, что происходит.
* ''defaultViewport'' %%%% [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] %%>%% Устанавливает согласованное окно просмотра для каждой страницы. По умолчанию используется область просмотра 800x600. ''null'' отключает область просмотра по умолчанию.
* ''width'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > ширина страницы в пикселях.
* ''height'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > высота страницы в пикселях.
* ''deviceScaleFactor'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Определяет масштабный коэффициент устройства (можно рассматривать как dpr). По умолчанию ''1'' .
* ''isMobile'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Учитывается ли ''meta viewport'' . По умолчанию - ''false'' .
* ''hasTouch'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Указывает, поддерживает ли область просмотра события касания. По умолчанию ''false''
* ''isLandscape'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Указывает, находится ли область просмотра в альбомном режиме. По умолчанию - ''false'' .
* ''args'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >> Дополнительные аргументы для передачи экземпляру браузера. Список флагов Chromium можно найти [[http://peter.sh/experiments/chromium-command-line-switches/|здесь]] , а вот список [[https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options|флагов Firefox]] .
* ''ignoreDefaultArgs'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|логическое]] | [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >> Если ''true'' , то не используйте ''[[#puppeteerdefaultargsoptions|puppeteer.defaultArgs()]]'' . Если дан массив, отфильтруйте заданные аргументы по умолчанию. Опасный вариант; используйте с осторожностью. По умолчанию - ''false'' .
* ''handleSIGINT'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Закройте процесс браузера, нажав Ctrl-C. По умолчанию ''true'' .
* ''handleSIGTERM'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Закройте процесс браузера на SIGTERM. По умолчанию ''true'' .
* ''handleSIGHUP'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Закройте процесс браузера по SIGHUP. По умолчанию ''true'' .
* ''timeout'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Максимальное время ожидания в миллисекундах запуска экземпляра браузера. По умолчанию ''30000'' (30 секунд). Передайте ''0'' , чтобы отключить тайм-аут.
* ''dumpio'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Передавать ли браузерный процесс stdout и stderr по конвейеру в ''process.stdout'' и ''process.stderr'' . По умолчанию - ''false'' .
* ''userDataDir'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Путь к каталогу [[https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md|пользовательских данных]] .
* ''env'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] > Укажите переменные среды, которые будут видны браузеру. По умолчанию ''process.env'' .
* ''devtools'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Следует ли автоматически открывать панель DevTools для каждой вкладки. Если эта опция ''true'' , опция ''headless'' будет установлена ''false'' .
* ''pipe'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Подключается к браузеру через канал вместо WebSocket. По умолчанию - ''false'' .
* ''extraPrefsFirefox'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] > Дополнительные [[https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/Preference_reference|настройки,]] которые можно передать Firefox (см. ''PUPPETEER_PRODUCT'' )
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[#class-browser|Browser]] >> Promise, которое разрешается экземпляру браузера.
Вы можете использовать ''ignoreDefaultArgs'' , чтобы отфильтровать ''--mute-audio'' из аргументов по умолчанию:
const browser = await puppeteer.launch({
ignoreDefaultArgs: ['--mute-audio']
});
> **ПРИМЕЧАНИЕ** Puppeteer также можно использовать для управления браузером Chrome, но лучше всего он работает с версией Chromium, с которой он связан. Нет никаких гарантий, что он будет работать с любой другой версией. С особой осторожностью используйте параметр ''executablePath'' . Если предпочтение отдается Google Chrome (а не Chromium), рекомендуется сборка [[https://www.google.com/chrome/browser/canary.html|Chrome Canary]] или [[https://www.chromium.org/getting-involved/dev-channel|Dev Channel]] . В приведенном выше [[#puppeteerlaunchoptions|puppeteer.launch ([options])]] любое упоминание Chromium также относится к Chrome. См. В ''[[https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/|this article]]'' описание различий между Chromium и Chrome. ''[[https://chromium.googlesource.com/chromium/src/+/lkgr/docs/chromium_browser_vs_google_chrome.md|This article]]'' описаны некоторые отличия для пользователей Linux.
==== puppeteer.networkConditions ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] >
Возвращает список сетевых условий, которые будут использоваться с ''[[#pageemulatenetworkconditionsnetworkconditions|page.emulateNetworkConditions(networkConditions)]]'' . Актуальный список условий можно найти в ''[[https://github.com/puppeteer/puppeteer/blob/main/src/common/NetworkConditions.ts|src/common/NetworkConditions.ts]]'' .
const puppeteer = require('puppeteer');
const slow3G = puppeteer.networkConditions['Slow 3G'];
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.emulateNetworkConditions(slow3G);
await page.goto('https://www.google.com');
// другие действия...
await browser.close();
})();
==== puppeteer.product ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > возвращает имя браузера, который находится в автоматическом режиме ( ''"chrome"'' или ''"firefox"'' )
Продукт устанавливается переменной среды ''PUPPETEER_PRODUCT'' или параметром ''product'' в [[#puppeteerlaunchoptions|puppeteer.launch ([options])]] и по умолчанию используется ''chrome'' . Поддержка Firefox является экспериментальной и требует установки Puppeteer через ''PUPPETEER_PRODUCT=firefox npm i puppeteer'' .
==== puppeteer.registerCustomQueryHandler(name, queryHandler) ====
* ''name'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Имя, под которым будет зарегистрирован пользовательский обработчик запросов.
* ''queryHandler'' < [[#interface-customqueryhandler|CustomQueryHandler]] > [[#interface-customqueryhandler|Пользовательский обработчик запросов]] для регистрации.
Регистрирует [[#interface-customqueryhandler|пользовательский обработчик запросов]] . После регистрации обработчик можно использовать везде, где ожидается селектор, добавив перед строкой выбора ''/'' . Имя может состоять только из строчных и прописных латинских букв.
Example:
puppeteer.registerCustomQueryHandler('getByClass', {
queryOne: (element, selector) => {
return element.querySelector(`.${selector}`);
},
queryAll: (element, selector) => {
return element.querySelectorAll(`.${selector}`);
},
});
const aHandle = await page.$('getByClass/…');
==== puppeteer.unregisterCustomQueryHandler(name) ====
* ''name'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Имя обработчика запроса, регистрацию которого нужно отменить.
===== Класс:BrowserFetcher =====
BrowserFetcher может загружать и управлять различными версиями Chromium и Firefox.
BrowserFetcher работает со строками ревизий, которые указывают точную версию Chromium, например, ''"533271"'' . Строки редакции можно получить на сайте [[https://omahaproxy.appspot.com/|omahaproxy.appspot.com]] .
В случае с Firefox BrowserFetcher загружает Firefox Nightly и работает с такими номерами версий, как ''"75"'' .
Пример использования BrowserFetcher для загрузки определенной версии Chromium и запуска Кукловода против нее:
const browserFetcher = puppeteer.createBrowserFetcher();
const revisionInfo = await browserFetcher.download('533271');
const browser = await puppeteer.launch({executablePath: revisionInfo.executablePath})
> **ПРИМЕЧАНИЕ** BrowserFetcher не предназначен для одновременной работы с другими экземплярами BrowserFetcher, которые используют тот же каталог загрузок.
==== browserFetcher.canDownload(revision) ====
* ''revision'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > ревизия для проверки доступности.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] >> возвращает ''true'' , если ревизия может быть загружена с хоста.
Метод инициирует запрос HEAD для проверки доступности ревизии.
==== browserFetcher.download(revision[,progressCallback]). ====
* ''revision'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > версия для загрузки.
* ''progressCallback'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function|function]] ( [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|number]] , [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|number]] )> Функция, которая будет вызываться с двумя аргументами:
* ''downloadedBytes'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > сколько байтов было загружено
* ''totalBytes'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > насколько велика общая загрузка.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] >> Разрешается с информацией о ревизии, когда ревизия загружается и извлекается
* ''revision'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > ревизия, из которой была создана информация
* ''folderPath'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > путь к извлеченной папке ревизии
* ''executablePath'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > путь к исполняемому файлу редакции
* ''url'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > URL, с которого можно скачать эту версию
* ''local'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] >, доступна ли ревизия локально на диске
Метод инициирует GET-запрос на загрузку ревизии с хоста.
==== browserFetcher.host() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Используемый хост загрузки.
==== browserFetcher.localRevisions() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >>> Список всех ревизий (для текущего ''product'' ), доступных локально на диске.
==== browserFetcher.platform() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Один из ''mac'' , ''linux'' , ''win32'' или ''win64'' .
==== browserFetcher.product() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Один из ''chrome'' или ''firefox'' .
==== browserFetcher.remove(revision) ====
* ''revision'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > ревизия, которую нужно удалить для текущего ''product'' . Метод сгенерирует, если ревизия не была загружена.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] > Устраняет, когда ревизия была удалена.
==== browserFetcher.revisionInfo(revision) ====
* ''revision'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > версия, для которой нужно получить информацию.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] >
* ''revision'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > ревизия, из которой была создана информация
* ''folderPath'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > путь к извлеченной папке ревизии
* ''executablePath'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > путь к исполняемому файлу редакции
* ''url'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > URL, с которого можно скачать эту версию
* ''local'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] >, доступна ли ревизия локально на диске
* ''product'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > один из ''chrome'' или ''firefox''
> **ПРИМЕЧАНИЕ.** Многие методы BrowserFetcher, такие как ''remove'' и ''revisionInfo'' , зависят от выбора ''product'' . См. [[#puppeteercreatebrowserfetcheroptions|Puppeteer.createBrowserFetcher ([параметры])]] .
===== Класс:Браузер =====
* extends: [[#class-eventemitter|EventEmitter]]
Браузер создается, когда Puppeteer подключается к экземпляру Chromium через ''[[#puppeteerlaunchoptions|puppeteer.launch]]'' или ''[[#puppeteerconnectoptions|puppeteer.connect]]'' .
Пример использования [[#class-browser|браузера]] для создания [[#class-page|страницы]] :
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Пример отключения от [[#class-browser|браузера]] и повторного подключения к нему :
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
// Сохраняем конечную точку, чтобы иметь возможность повторно подключиться к Chromium
const browserWSEndpoint = browser.wsEndpoint();
// Отключить кукловода от Chromium
browser.disconnect();
// Использование конечной точки для восстановления соединения
const browser2 = await puppeteer.connect({browserWSEndpoint});
// Закрываем Chromium
await browser2.close();
})();
==== Событие:"разъединённый ====
Используется,когда кукловод отключается от экземпляра Chromium.Это может произойти из-за одного из следующих моментов:
* Хром закрыт или разбился
* ''[[#browserdisconnect|browser.disconnect]]'' метод был назван
==== Событие:"изменённая мишень ====
* <[[#class-target|Target]]>
Испускается,когда урна мишени меняется.
> **ПРИМЕЧАНИЕ.** Это включает целевые изменения в контексте браузера в режиме инкогнито.
==== Событие:"созданный мишенью ====
* <[[#class-target|Target]]>
Испускается при создании цели, например, когда новая страница открывается с помощью ''[[https://developer.mozilla.org/en-US/docs/Web/API/Window/open|window.open]]'' или ''[[#browsernewpage|browser.newPage]]'' .
> **ПРИМЕЧАНИЕ.** Это включает создание целевых объектов в контексте браузера в режиме инкогнито.
==== Событие:"уничтоженный мишенью ====
* <[[#class-target|Target]]>
Используется,когда цель уничтожена,например,при закрытии страницы.
> **ПРИМЕЧАНИЕ.** Сюда входят целевые разрушения в контексте браузера в режиме инкогнито.
==== browser.browserContexts() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-browsercontext|BrowserContext]] >>
Возвращает массив всех открытых контекстов браузера. Во вновь созданном браузере это вернет единственный экземпляр [[#class-browsercontext|BrowserContext]] .
==== browser.close() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] >
Закрывает Chromium и все его страницы (если таковые были открыты). Сам объект [[#class-browser|Browser]] считается удаленным и больше не может использоваться.
==== browser.createIncognitoBrowserContext() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[#class-browsercontext|BrowserContext]] >>
Создает новый контекст браузера инкогнито.Это не будет совместно использовать куки/кэш с другими контекстами браузера.
(async () => {
const browser = await puppeteer.launch();
// Создаем новый контекст браузера в режиме инкогнито.
const context = await browser.createIncognitoBrowserContext();
// Создаем новую страницу в безупречном контексте.
const page = await context.newPage();
// Делаем что-нибудь
await page.goto('https://example.com');
})();
==== browser.defaultBrowserContext() ====
* возвращает: < [[#class-browsercontext|BrowserContext]] >
Возвращает контекст браузера по умолчанию.Контекст браузера по умолчанию не может быть закрыт.
==== browser.disconnect() ====
Отключает Puppeteer от браузера, но оставляет процесс Chromium запущенным. После вызова ''disconnect'' , то [[#class-browser|браузер]] объект считается настроенным и не может больше использоваться.
==== browser.isConnected() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|логическое]] >
Указывает на то,что браузер подключен.
==== browser.newPage() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] < [[#class-page|Страница]] >>
Обещание, которое преобразуется в новый объект [[#class-page|Page]] . [[#class-page|Страница]] создана в контексте браузера по умолчанию.
==== browser.pages() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-page|Page]] >>> Promise, который преобразуется в массив всех открытых страниц. Невидимые страницы, такие как ''"background_page"'' , здесь не отображаются. Вы можете найти их с помощью [[#targetpage|target.page ()]] .
Массив всех страниц внутри Браузера.В случае нескольких контекстов браузера,метод вернет массив со всеми страницами во всех контекстах браузера.
==== browser.process() ====
* возвращает: %%%% [[https://nodejs.org/api/child_process.html|ChildProcess]] %%>%% Созданный процесс браузера. Возвращает ''null'' , если экземпляр браузера был создан с помощью метода ''[[#puppeteerconnectoptions|puppeteer.connect]]'' .
==== browser.target() ====
* возвращает: < [[#class-target|Target]] >
Цель,связанная с браузером.
==== browser.targets() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-target|Target]] >>
Массив всех активных целей внутри Браузера.В случае нескольких контекстов браузера,метод вернет массив со всеми целями во всех контекстах браузера.
==== browser.userAgent() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >> Promise, которое преобразуется в исходный пользовательский агент браузера.
> **ПРИМЕЧАНИЕ** Pages могут переопределить пользовательский агент браузера с помощью [[#pagesetuseragentuseragent|page.setUserAgent.]]
==== browser.version() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >> Для безголового Chromium это похоже на ''HeadlessChrome/61.0.3153.0'' . Для пользователей без головы это похоже на ''Chrome/61.0.3153.0'' .
> **ПРИМЕЧАНИЕ** формат browser.version () может измениться в будущих выпусках Chromium.
==== browser.waitForTarget(предикат[,опции]). ====
* ''predicate'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function|function]] ( [[#class-target|Target]] ): [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Функция, запускаемая для каждой цели
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] >
* ''timeout'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Максимальное время ожидания в миллисекундах. Передайте ''0'' , чтобы отключить тайм-аут. По умолчанию 30 секунд.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[#class-target|Target]] >> Promise, которое преобразуется в первую найденную цель, соответствующую функции ''predicate'' .
При этом осуществляется поиск цели во всех контекстах браузера.
Пример поиска цели для страницы, открытой через ''window.open'' :
await page.evaluate(() => window.open('https://www.example.com/'));
const newWindowTarget = await browser.waitForTarget(target => target.url() === 'https://www.example.com/');
==== browser.wsEndpoint() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > URL-адрес веб-сокета браузера.
Конечная точка веб-сокета браузера, которую можно использовать в качестве аргумента для [[#puppeteerconnectoptions|puppeteer.connect]] . Формат: %%''ws:
//${host}:${port}/devtools/browser/''%%
Вы можете найти ''webSocketDebuggerUrl'' по %%''http://${host}:${port}/json/version''%% . Узнайте больше о [[https://chromedevtools.github.io/devtools-protocol|протоколе devtools]] и [[https://chromedevtools.github.io/devtools-protocol/#how-do-i-access-the-browser-target|конечной точке браузера]] .
===== Класс:БраузерКонтекст =====
* extends: [[#class-eventemitter|EventEmitter]]
BrowserContexts позволяют управлять несколькими независимыми сеансами браузера. Когда браузер запущен, по умолчанию используется один BrowserContext. Метод ''browser.newPage()'' создает страницу в контексте браузера по умолчанию.
Если страница открывает другую страницу, например, с помощью вызова ''window.open'' , всплывающее окно будет принадлежать контексту браузера родительской страницы.
Puppeteer позволяет создавать контексты браузера «инкогнито» с помощью метода ''browser.createIncognitoBrowserContext()'' . Контексты браузера "инкогнито" не записывают данные просмотра на диск.
// Создаем новый контекст браузера в режиме инкогнито
const context = await browser.createIncognitoBrowserContext();
// Создаем новую страницу внутри контекста.
const page = await context.newPage();
// ... что-то делать со страницей ...
await page.goto('https://example.com');
// Удаляем контекст, когда он больше не нужен.
await context.close();
==== Событие:"изменённая мишень ====
* <[[#class-target|Target]]>
Исполняется,когда изменяется url цели внутри контекста браузера.
==== Событие:"созданный мишенью ====
* <[[#class-target|Target]]>
Излучается, когда в контексте браузера создается новая цель, например, когда новая страница открывается с помощью ''[[https://developer.mozilla.org/en-US/docs/Web/API/Window/open|window.open]]'' или ''[[#browsercontextnewpage|browserContext.newPage]]'' .
==== Событие:"уничтоженный мишенью ====
* <[[#class-target|Target]]>
Используется,когда цель внутри контекста браузера уничтожена,например,при закрытии страницы.
==== browserContext.browser() ====
* возвращает: < [[#class-browser|Браузер]] >
Браузер,к которому принадлежит этот контекст браузера.
==== browserContext.clearPermissionOverrides() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] >
Очищает все переопределения разрешений для контекста браузера.
const context = browser.defaultBrowserContext();
context.overridePermissions('https://example.com', ['clipboard-read']);
// делаем что-нибудь ..
context.clearPermissionOverrides();
==== browserContext.close() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] >
Закрывает контекст браузера.Все цели,принадлежащие контексту браузера,будут закрыты.
> **ПРИМЕЧАНИЕ:** закрывать можно только контексты браузера в режиме инкогнито.
==== browserContext.isIncognito() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|логическое]] >
Возвращает,является ли BrowserContext инкогнито.Контекст браузера по умолчанию является единственным контекстом браузера,не использующим инкогнито.
> **ПРИМЕЧАНИЕ:** контекст браузера по умолчанию не может быть закрыт.
==== browserContext.newPage() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] < [[#class-page|Страница]] >>
Создает новую страницу в контексте браузера.
==== browserContext.overrideПолномочия (происхождение,разрешения) ====
* ''origin'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Источник, [[https://developer.mozilla.org/en-US/docs/Glossary/Origin|которому]] нужно предоставить разрешения, например, " [[https://example.com|https://example.com]] ".
* ''permissions'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] >> Массив предоставляемых разрешений. Все разрешения, не перечисленные здесь, будут автоматически отклонены. Разрешения могут быть одним из следующих значений:
* '''geolocation'''
* '''midi'''
* '''midi-sysex''' (системно-эксклюзивные midi)
* '''notifications'''
* '''push'''
* '''camera'''
* '''microphone'''
* '''background-sync'''
* '''ambient-light-sensor'''
* '''accelerometer'''
* '''gyroscope'''
* '''magnetometer'''
* '''accessibility-events'''
* '''clipboard-read'''
* '''clipboard-write'''
* '''payment-handler'''
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] >
const context = browser.defaultBrowserContext();
await context.overridePermissions('https://html5demos.com', ['geolocation']);
==== browserContext.pages() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-page|Page]] >>> Promise, который преобразуется в массив всех открытых страниц. Невидимые страницы, такие как ''"background_page"'' , здесь не отображаются. Вы можете найти их с помощью [[#targetpage|target.page ()]] .
Массив всех страниц в контексте браузера.
==== browserContext.targets() ====
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-target|Target]] >>
Массив всех активных целей в контексте браузера.
==== browserContext.waitForTarget(предикат[,опции]) ====
* ''predicate'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function|function]] ( [[#class-target|Target]] ): [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type|boolean]] > Функция, запускаемая для каждой цели
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] >
* ''timeout'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] > Максимальное время ожидания в миллисекундах. Передайте ''0'' , чтобы отключить тайм-аут. По умолчанию 30 секунд.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[#class-target|Target]] >> Promise, которое преобразуется в первую найденную цель, соответствующую функции ''predicate'' .
При этом выполняется поиск цели в данном конкретном контексте браузера.
Пример поиска цели для страницы, открытой через ''window.open'' :
await page.evaluate(() => window.open('https://www.example.com/'));
const newWindowTarget = await browserContext.waitForTarget(target => target.url() === 'https://www.example.com/');
===== Класс:Страница =====
* extends: [[#class-eventemitter|EventEmitter]]
Страница предоставляет методы для взаимодействия с одной вкладкой или [[https://developer.chrome.com/extensions/background_pages|фоновой страницей расширения]] в Chromium. Один экземпляр [[#class-browser|браузера]] может иметь несколько экземпляров [[#class-page|страницы]] .
В этом примере создается страница,осуществляется навигация по URL,а затем сохраняется снимок экрана:
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: 'screenshot.png'});
await browser.close();
})();
Класс Page генерирует различные события (описанные ниже), которые можно обрабатывать с помощью любого из методов ''[[#class-eventemitter|EventEmitter]]'' , например ''on'' , ''once'' или ''off'' .
В этом примере регистрируется сообщение для события ''load'' одной страницы :
page.once('load', () => console.log('Page loaded!'));
Чтобы отказаться от подписки на события, используйте метод ''off'' :
function logRequest(interceptedRequest) {
console.log('A request was made:', interceptedRequest.url());
}
page.on('request', logRequest);
// Немного позже...
page.off('request', logRequest);
==== Событие:"закрытие ====
Используется,когда страница закрывается.
==== Событие:"консоль ====
* <[[#class-consolemessage|ConsoleMessage]]>
Генерируется, когда JavaScript на странице вызывает один из методов консольного API, например ''console.log'' или ''console.dir'' . Также выдается, если страница выдает ошибку или предупреждение.
Аргументы, переданные в ''console.log'' , появляются как аргументы в обработчике событий.
Пример обработки ''console'' события:
page.on('console', msg => {
for (let i = 0; i < msg.args().length; ++i)
console.log(`${i}: ${msg.args()[i]}`);
});
page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));
==== Событие:"диалог ====
* <[[#class-dialog|Dialog]]>
Выдается при появлении диалогового окна JavaScript, например ''alert'' , ''prompt'' , ''confirm'' или ''beforeunload'' . Кукольник может ответить на диалог с помощью [[#class-dialog|Диалог]] «s [[#dialogacceptprompttext|принять]] или [[#dialogdismiss|отклонить]] методы.
==== Событие:"загруженный дом ====
Генерируется при ''[[https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded|DOMContentLoaded]]'' события JavaScript DOMContentLoaded .
==== Событие:"ошибка ====
* <[[https://nodejs.org/api/errors.html#errors_class_error|Error]]>
Отправляется при сбое страницы.
> **ПРИМЕЧАНИЕ.** Событие ''error'' имеет особое значение в Node, подробности см. В разделе « [[https://nodejs.org/api/events.html#events_error_events|События ошибок»]] .
==== Событие:"подкреплённый ====
* <[[#class-frame|Frame]]>
Испускается,когда рама прикреплена.
==== Событие:"обрамлённый ====
* <[[#class-frame|Frame]]>
Используется,когда рамка отсоединена.
==== Событие:"фрэмавигационный ====
* <[[#class-frame|Frame]]>
Используется,когда рамка перемещается к новому урлу.
==== событие:"нагрузка ====
Генерируется при отправке события ''[[https://developer.mozilla.org/en-US/docs/Web/Events/load|load]]'' JavaScript .
==== Событие:"метрика ====
* <[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]]>
* ''title'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Заголовок, переданный в ''console.timeStamp'' .
* ''metrics'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Object]] > Объект, содержащий метрики в виде пар ключ / значение. Значения показателей имеют тип < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type|число]] >.
Генерируется, когда код JavaScript вызывает ''console.timeStamp'' . Список показателей см. На ''page.metrics'' .
==== событие:'пейджеррор ====
* < [[https://nodejs.org/api/errors.html#errors_class_error|Ошибка]] > Сообщение об исключении
Выписывается,когда на странице происходит незамеченное исключение.
==== Событие:"всплытие ====
* < [[#class-page|Страница]] > Страница, соответствующая «всплывающему» окну
Отменяется,когда страница открывает новую вкладку или окно.
const [popup] = await Promise.all([
new Promise(resolve => page.once('popup', resolve)),
page.click('a[target=_blank]'),
]);
const [popup] = await Promise.all([
new Promise(resolve => page.once('popup', resolve)),
page.evaluate(() => window.open('https://example.com')),
]);
==== Событие:"запрос ====
* <[[#class-httprequest|HTTPRequest]]>
Выдается, когда страница выдает запрос. Объект [[#class-httprequest|HTTPRequest доступен]] только для чтения. Чтобы перехватить и ''page.setRequestInterception'' запросы, см. Page.setRequestInterception .
==== Событие:"отклонённый запрос ====
* <[[#class-httprequest|HTTPRequest]]>
Используется,когда запрос не удается,например,по таймингу.
> **ПРИМЕЧАНИЕ.** Ответы HTTP Error, такие как 404 или 503, по-прежнему являются успешными ответами с точки зрения HTTP, поэтому запрос завершится с событием ''[[#event-requestfinished|'requestfinished']]'' а не с ''[[#event-requestfailed|'requestfailed']]'' .
==== Событие:запрошенный ====
* <[[#class-httprequest|HTTPRequest]]>
Выпущено при успешном завершении запроса.
==== Событие:"реакция ====
* <[[#class-httpresponse|HTTPResponse]]>
Выдается при получении [[#class-httpresponse|HTTPResponse]] .
==== Событие:"созданный рабочими ====
* <[[#class-webworker|WebWorker]]>
Выдается, когда на [[https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API|странице]] создается выделенный WebWorker .
==== Событие:"уничтоженный рабочими ====
* <[[#class-webworker|WebWorker]]>
[[https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API|Выдается при]] завершении работы выделенного WebWorker .
==== page.$(selector) ====
* ''selector'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > [[https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|Селектор]] для запроса страницы для
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Обещание]] [[#class-elementhandle|ElementHandle]] >>
Метод запускает ''document.querySelector'' на странице. Если ни один элемент не соответствует селектору, возвращаемое значение принимает значение ''null'' .
Ярлык для [[#frameselector|page.mainFrame (). $ (Селектор)]] .
==== page.$$(selector) ====
* ''selector'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > [[https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|Селектор]] для запроса страницы для
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-elementhandle|ElementHandle]] >>>
Метод запускает ''document.querySelectorAll'' на странице. Если ни один элемент не соответствует селектору, возвращаемое значение преобразуется в ''[]'' .
Ярлык для [[#frameselector-1|page.mainFrame (). $$ (селектор)]] .
==== page.$$eval(селектор,функция pageFunction[,...args])) ====
* ''selector'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > [[https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|Селектор]] для запроса страницы для
* ''pageFunction'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function|function]] ( [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[https://developer.mozilla.org/en-US/docs/Web/API/element|Element]] >)> Функция для оценки в контексте браузера
* ''...args'' <... [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description|Сериализуемый]] | [[#class-jshandle|JSHandle]] > Аргументы для передачи на ''pageFunction''
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description|Serializable]] >> Promise, которое разрешается в возвращаемое значение ''pageFunction''
Этот метод запускает ''Array.from(document.querySelectorAll(selector))'' на странице и передает его в качестве первого аргумента ''pageFunction'' .
Если ''pageFunction'' возвращает [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|обещание]] , то ''page.$$eval'' будет ждать разрешения обещания и вернет его значение.
Examples:
const divCount = await page.$$eval('div', divs => divs.length);
const options = await page.$$eval('div > span.options', options => options.map(option => option.textContent));
==== page.$eval(селектор,pageFunction[,...args])) ====
* ''selector'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > [[https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|Селектор]] для запроса страницы для
* ''pageFunction'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function|function]] ( [[https://developer.mozilla.org/en-US/docs/Web/API/element|Element]] )> Функция для оценки в контексте браузера
* ''...args'' <... [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description|Сериализуемый]] | [[#class-jshandle|JSHandle]] > Аргументы для передачи на ''pageFunction''
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description|Serializable]] >> Promise, которое разрешается в возвращаемое значение ''pageFunction''
Этот метод запускает ''document.querySelector'' на странице и передает его в качестве первого аргумента ''pageFunction'' . Если нет ''selector'' соответствия элемента , метод выдает ошибку.
Если ''pageFunction'' возвращает [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] , то ''page.$eval'' будет ждать разрешения обещания и вернет его значение.
Examples:
const searchValue = await page.$eval('#search', el => el.value);
const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
const html = await page.$eval('.main-container', e => e.outerHTML);
Ярлык для [[#frameevalselector-pagefunction-args|page.mainFrame (). $ Eval (selector, pageFunction)]] .
==== page.$x(expression) ====
* ''expression'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > Выражение для [[https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate|оценки]] .
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array|Array]] < [[#class-elementhandle|ElementHandle]] >>>
Метод оценивает выражение XPath относительно документа страницы как контекстного узла.Если таких элементов нет,метод преобразуется в пустой массив.
Ярлык для [[#framexexpression|page.mainFrame (). $ X (выражение)]]
==== page.accessibility ====
* возвращает: < [[#class-accessibility|Доступность]] >
==== page.addScriptTag(options) ====
* ''options'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object|Объект]] >
* ''url'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|строка]] > URL-адрес добавляемого скрипта.
* ''path'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Путь к файлу JavaScript, который будет вставлен во фрейм. Если ''path'' является относительным путем, он разрешается относительно [[https://nodejs.org/api/process.html#process_process_cwd|текущего рабочего каталога]] .
* ''content'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Необработанный контент JavaScript для вставки во фрейм.
* ''type'' < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type|string]] > Тип скрипта. Используйте «модуль», чтобы загрузить модуль Javascript ES6. Смотрите [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script|сценарий]] для более подробной информации.
* возвращает: < [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise]] < [[#class-elementhandle|ElementHandle]] >>, который разрешается в добавленный тег, когда запускается загрузка скрипта или когда содержимое скрипта было вставлено во фрейм.
Добавляет ''