====== Кукловодческая документация ====== ===== 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'' %%%% [[#browserwsendpoint|конечная точка веб-сокета браузера]] для подключения. * ''browserURL'' %%%% 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'' %%%% Устанавливает согласованное окно просмотра для каждой страницы. По умолчанию используется область просмотра 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'' %%%% Устанавливает согласованное окно просмотра для каждой страницы. По умолчанию используется область просмотра 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() ==== * возвращает: %%%% Созданный процесс браузера. Возвращает ''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|Обещание]] > Метод запускает ''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]] >>, который разрешается в добавленный тег, когда запускается загрузка скрипта или когда содержимое скрипта было вставлено во фрейм. Добавляет ''