mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
chore: mark version v5.4.0 (#6542)
This commit is contained in:
parent
8e9970df67
commit
729cdfe98a
22
README.md
22
README.md
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right">
|
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right">
|
||||||
|
|
||||||
###### [API](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md) | [FAQ](#faq) | [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md) | [Troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
###### [API](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md) | [FAQ](#faq) | [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md) | [Troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
||||||
|
|
||||||
> Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). Puppeteer runs [headless](https://developers.google.com/web/updates/2017/04/headless-chrome) by default, but can be configured to run full (non-headless) Chrome or Chromium.
|
> Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). Puppeteer runs [headless](https://developers.google.com/web/updates/2017/04/headless-chrome) by default, but can be configured to run full (non-headless) Chrome or Chromium.
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ npm i puppeteer
|
|||||||
# or "yarn add puppeteer"
|
# or "yarn add puppeteer"
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API. To skip the download, or to download a different browser, see [Environment variables](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#environment-variables).
|
Note: When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API. To skip the download, or to download a different browser, see [Environment variables](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#environment-variables).
|
||||||
|
|
||||||
|
|
||||||
### puppeteer-core
|
### puppeteer-core
|
||||||
@ -63,7 +63,7 @@ Note: Prior to v1.18.1, Puppeteer required at least Node v6.4.0. Versions from v
|
|||||||
Node 8.9.0+. Starting from v3.0.0 Puppeteer starts to rely on Node 10.18.1+. All examples below use async/await which is only supported in Node v7.6.0 or greater.
|
Node 8.9.0+. Starting from v3.0.0 Puppeteer starts to rely on Node 10.18.1+. All examples below use async/await which is only supported in Node v7.6.0 or greater.
|
||||||
|
|
||||||
Puppeteer will be familiar to people using other browser testing frameworks. You create an instance
|
Puppeteer will be familiar to people using other browser testing frameworks. You create an instance
|
||||||
of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#).
|
of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#).
|
||||||
|
|
||||||
**Example** - navigating to https://example.com and saving a screenshot as *example.png*:
|
**Example** - navigating to https://example.com and saving a screenshot as *example.png*:
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ Execute script on the command line
|
|||||||
node example.js
|
node example.js
|
||||||
```
|
```
|
||||||
|
|
||||||
Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#pagesetviewportviewport).
|
Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#pagesetviewportviewport).
|
||||||
|
|
||||||
**Example** - create a PDF.
|
**Example** - create a PDF.
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ Execute script on the command line
|
|||||||
node hn.js
|
node hn.js
|
||||||
```
|
```
|
||||||
|
|
||||||
See [`Page.pdf()`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#pagepdfoptions) for more information about creating pdfs.
|
See [`Page.pdf()`](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#pagepdfoptions) for more information about creating pdfs.
|
||||||
|
|
||||||
**Example** - evaluate script in the context of the page
|
**Example** - evaluate script in the context of the page
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ Execute script on the command line
|
|||||||
node get-dimensions.js
|
node get-dimensions.js
|
||||||
```
|
```
|
||||||
|
|
||||||
See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#pageevaluatepagefunction-args) for more information on `evaluate` and related methods like `evaluateOnNewDocument` and `exposeFunction`.
|
See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#pageevaluatepagefunction-args) for more information on `evaluate` and related methods like `evaluateOnNewDocument` and `exposeFunction`.
|
||||||
|
|
||||||
<!-- [END getstarted] -->
|
<!-- [END getstarted] -->
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/
|
|||||||
|
|
||||||
**1. Uses Headless mode**
|
**1. Uses Headless mode**
|
||||||
|
|
||||||
Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the [`headless` option](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#puppeteerlaunchoptions) when launching a browser:
|
Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the [`headless` option](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#puppeteerlaunchoptions) when launching a browser:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const browser = await puppeteer.launch({headless: false}); // default is true
|
const browser = await puppeteer.launch({headless: false}); // default is true
|
||||||
@ -173,7 +173,7 @@ pass in the executable's path when creating a `Browser` instance:
|
|||||||
const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});
|
const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also use Puppeteer with Firefox Nightly (experimental support). See [`Puppeteer.launch()`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#puppeteerlaunchoptions) for more information.
|
You can also use Puppeteer with Firefox Nightly (experimental support). See [`Puppeteer.launch()`](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#puppeteerlaunchoptions) for more information.
|
||||||
|
|
||||||
See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/master/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users.
|
See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/master/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users.
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run
|
|||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [API Documentation](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md)
|
- [API Documentation](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md)
|
||||||
- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples/)
|
- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples/)
|
||||||
- [Community list of Puppeteer resources](https://github.com/transitive-bullshit/awesome-puppeteer)
|
- [Community list of Puppeteer resources](https://github.com/transitive-bullshit/awesome-puppeteer)
|
||||||
|
|
||||||
@ -328,7 +328,7 @@ See [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING
|
|||||||
|
|
||||||
Official Firefox support is currently experimental. The ongoing collaboration with Mozilla aims to support common end-to-end testing use cases, for which developers expect cross-browser coverage. The Puppeteer team needs input from users to stabilize Firefox support and to bring missing APIs to our attention.
|
Official Firefox support is currently experimental. The ongoing collaboration with Mozilla aims to support common end-to-end testing use cases, for which developers expect cross-browser coverage. The Puppeteer team needs input from users to stabilize Firefox support and to bring missing APIs to our attention.
|
||||||
|
|
||||||
From Puppeteer v2.1.0 onwards you can specify [`puppeteer.launch({product: 'firefox'})`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#puppeteerlaunchoptions) to run your Puppeteer scripts in Firefox Nightly, without any additional custom patches. While [an older experiment](https://www.npmjs.com/package/puppeteer-firefox) required a patched version of Firefox, [the current approach](https://wiki.mozilla.org/Remote) works with “stock” Firefox.
|
From Puppeteer v2.1.0 onwards you can specify [`puppeteer.launch({product: 'firefox'})`](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#puppeteerlaunchoptions) to run your Puppeteer scripts in Firefox Nightly, without any additional custom patches. While [an older experiment](https://www.npmjs.com/package/puppeteer-firefox) required a patched version of Firefox, [the current approach](https://wiki.mozilla.org/Remote) works with “stock” Firefox.
|
||||||
|
|
||||||
We will continue to collaborate with other browser vendors to bring Puppeteer support to browsers such as Safari.
|
We will continue to collaborate with other browser vendors to bring Puppeteer support to browsers such as Safari.
|
||||||
This effort includes exploration of a standard for executing cross-browser commands (instead of relying on the non-standard DevTools Protocol used by Chrome).
|
This effort includes exploration of a standard for executing cross-browser commands (instead of relying on the non-standard DevTools Protocol used by Chrome).
|
||||||
@ -424,7 +424,7 @@ await page.evaluate(() => {
|
|||||||
|
|
||||||
You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, [video playback/screenshots is likely to fail](https://github.com/puppeteer/puppeteer/issues/291).) There are two reasons for this:
|
You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, [video playback/screenshots is likely to fail](https://github.com/puppeteer/puppeteer/issues/291).) There are two reasons for this:
|
||||||
|
|
||||||
* Puppeteer is bundled with Chromium — not Chrome — and so by default, it inherits all of [Chromium's media-related limitations](https://www.chromium.org/audio-video). This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the [`executablePath` option to `puppeteer.launch`](https://github.com/puppeteer/puppeteer/blob/v5.3.1/docs/api.md#puppeteerlaunchoptions). You should only use this configuration if you need an official release of Chrome that supports these media formats.)
|
* Puppeteer is bundled with Chromium — not Chrome — and so by default, it inherits all of [Chromium's media-related limitations](https://www.chromium.org/audio-video). This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the [`executablePath` option to `puppeteer.launch`](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#puppeteerlaunchoptions). You should only use this configuration if you need an official release of Chrome that supports these media formats.)
|
||||||
* Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer [does not support HTTP Live Streaming (HLS)](https://caniuse.com/#feat=http-live-streaming).
|
* Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer [does not support HTTP Live Streaming (HLS)](https://caniuse.com/#feat=http-live-streaming).
|
||||||
|
|
||||||
#### Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?
|
#### Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?
|
||||||
|
41
docs/api.md
41
docs/api.md
@ -1,11 +1,12 @@
|
|||||||
|
|
||||||
# Puppeteer API <!-- GEN:version -->Tip-Of-Tree<!-- GEN:stop-->
|
# Puppeteer API <!-- GEN:version -->v5.4.0<!-- GEN:stop-->
|
||||||
<!-- GEN:empty-if-release --><!-- GEN:stop -->
|
<!-- GEN:empty-if-release --><!-- GEN:stop -->
|
||||||
|
|
||||||
- Interactive Documentation: https://pptr.dev
|
- Interactive Documentation: https://pptr.dev
|
||||||
- API Translations: [中文|Chinese](https://zhaoqize.github.io/puppeteer-api-zh_CN/#/)
|
- API Translations: [中文|Chinese](https://zhaoqize.github.io/puppeteer-api-zh_CN/#/)
|
||||||
- Troubleshooting: [troubleshooting.md](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
- Troubleshooting: [troubleshooting.md](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
||||||
- Releases per Chromium Version:
|
- Releases per Chromium Version:
|
||||||
|
* Chromium 87.0.4272.0 - [Puppeteer v5.4.0](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md)
|
||||||
* Chromium 86.0.4240.0 - [Puppeteer v5.3.0](https://github.com/puppeteer/puppeteer/blob/v5.3.0/docs/api.md)
|
* Chromium 86.0.4240.0 - [Puppeteer v5.3.0](https://github.com/puppeteer/puppeteer/blob/v5.3.0/docs/api.md)
|
||||||
* Chromium 85.0.4182.0 - [Puppeteer v5.2.1](https://github.com/puppeteer/puppeteer/blob/v5.2.1/docs/api.md)
|
* Chromium 85.0.4182.0 - [Puppeteer v5.2.1](https://github.com/puppeteer/puppeteer/blob/v5.2.1/docs/api.md)
|
||||||
* Chromium 84.0.4147.0 - [Puppeteer v5.1.0](https://github.com/puppeteer/puppeteer/blob/v5.1.0/docs/api.md)
|
* Chromium 84.0.4147.0 - [Puppeteer v5.1.0](https://github.com/puppeteer/puppeteer/blob/v5.1.0/docs/api.md)
|
||||||
@ -30,14 +31,18 @@
|
|||||||
- [Environment Variables](#environment-variables)
|
- [Environment Variables](#environment-variables)
|
||||||
- [Working with Chrome Extensions](#working-with-chrome-extensions)
|
- [Working with Chrome Extensions](#working-with-chrome-extensions)
|
||||||
- [class: Puppeteer](#class-puppeteer)
|
- [class: Puppeteer](#class-puppeteer)
|
||||||
|
* [puppeteer.clearCustomQueryHandlers()](#puppeteerclearcustomqueryhandlers)
|
||||||
* [puppeteer.connect(options)](#puppeteerconnectoptions)
|
* [puppeteer.connect(options)](#puppeteerconnectoptions)
|
||||||
* [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions)
|
* [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions)
|
||||||
|
* [puppeteer.customQueryHandlerNames()](#puppeteercustomqueryhandlernames)
|
||||||
* [puppeteer.defaultArgs([options])](#puppeteerdefaultargsoptions)
|
* [puppeteer.defaultArgs([options])](#puppeteerdefaultargsoptions)
|
||||||
* [puppeteer.devices](#puppeteerdevices)
|
* [puppeteer.devices](#puppeteerdevices)
|
||||||
* [puppeteer.errors](#puppeteererrors)
|
* [puppeteer.errors](#puppeteererrors)
|
||||||
* [puppeteer.executablePath()](#puppeteerexecutablepath)
|
* [puppeteer.executablePath()](#puppeteerexecutablepath)
|
||||||
* [puppeteer.launch([options])](#puppeteerlaunchoptions)
|
* [puppeteer.launch([options])](#puppeteerlaunchoptions)
|
||||||
* [puppeteer.product](#puppeteerproduct)
|
* [puppeteer.product](#puppeteerproduct)
|
||||||
|
* [puppeteer.registerCustomQueryHandler(name, queryHandler)](#puppeteerregistercustomqueryhandlername-queryhandler)
|
||||||
|
* [puppeteer.unregisterCustomQueryHandler(name)](#puppeteerunregistercustomqueryhandlername)
|
||||||
- [class: BrowserFetcher](#class-browserfetcher)
|
- [class: BrowserFetcher](#class-browserfetcher)
|
||||||
* [browserFetcher.canDownload(revision)](#browserfetchercandownloadrevision)
|
* [browserFetcher.canDownload(revision)](#browserfetchercandownloadrevision)
|
||||||
* [browserFetcher.download(revision[, progressCallback])](#browserfetcherdownloadrevision-progresscallback)
|
* [browserFetcher.download(revision[, progressCallback])](#browserfetcherdownloadrevision-progresscallback)
|
||||||
@ -354,6 +359,7 @@
|
|||||||
* [eventEmitter.once(event, handler)](#eventemitteronceevent-handler)
|
* [eventEmitter.once(event, handler)](#eventemitteronceevent-handler)
|
||||||
* [eventEmitter.removeAllListeners([event])](#eventemitterremovealllistenersevent)
|
* [eventEmitter.removeAllListeners([event])](#eventemitterremovealllistenersevent)
|
||||||
* [eventEmitter.removeListener(event, handler)](#eventemitterremovelistenerevent-handler)
|
* [eventEmitter.removeListener(event, handler)](#eventemitterremovelistenerevent-handler)
|
||||||
|
- [interface: CustomQueryHandler](#interface-customqueryhandler)
|
||||||
<!-- GEN:stop -->
|
<!-- GEN:stop -->
|
||||||
|
|
||||||
### Overview
|
### Overview
|
||||||
@ -466,6 +472,8 @@ const puppeteer = require('puppeteer');
|
|||||||
await browser.close();
|
await browser.close();
|
||||||
})();
|
})();
|
||||||
```
|
```
|
||||||
|
#### puppeteer.clearCustomQueryHandlers()
|
||||||
|
Clears all registered handlers.
|
||||||
|
|
||||||
#### puppeteer.connect(options)
|
#### puppeteer.connect(options)
|
||||||
- `options` <[Object]>
|
- `options` <[Object]>
|
||||||
@ -494,6 +502,9 @@ This methods attaches Puppeteer to an existing browser instance.
|
|||||||
- `product` <"chrome"|"firefox"> [string] for the product to run. Possible values are: `chrome`, `firefox`. Defaults to `chrome`.
|
- `product` <"chrome"|"firefox"> [string] for the product to run. Possible values are: `chrome`, `firefox`. Defaults to `chrome`.
|
||||||
- returns: <[BrowserFetcher]>
|
- returns: <[BrowserFetcher]>
|
||||||
|
|
||||||
|
#### puppeteer.customQueryHandlerNames()
|
||||||
|
- returns: <[[Array]<string>> A list with the names of all registered custom query handlers.
|
||||||
|
|
||||||
#### puppeteer.defaultArgs([options])
|
#### puppeteer.defaultArgs([options])
|
||||||
- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields:
|
- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields:
|
||||||
- `headless` <[boolean]> Whether to run browser in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). Defaults to `true` unless the `devtools` option is `true`.
|
- `headless` <[boolean]> Whether to run browser in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). Defaults to `true` unless the `devtools` option is `true`.
|
||||||
@ -602,6 +613,22 @@ const browser = await puppeteer.launch({
|
|||||||
|
|
||||||
The product is set by the `PUPPETEER_PRODUCT` environment variable or the `product` option in [puppeteer.launch([options])](#puppeteerlaunchoptions) and defaults to `chrome`. Firefox support is experimental and requires to install Puppeteer via `PUPPETEER_PRODUCT=firefox npm i puppeteer`.
|
The product is set by the `PUPPETEER_PRODUCT` environment variable or the `product` option in [puppeteer.launch([options])](#puppeteerlaunchoptions) and defaults to `chrome`. Firefox support is experimental and requires to install Puppeteer via `PUPPETEER_PRODUCT=firefox npm i puppeteer`.
|
||||||
|
|
||||||
|
#### puppeteer.registerCustomQueryHandler(name, queryHandler)
|
||||||
|
- `name` <[string]> The name that the custom query handler will be registered under.
|
||||||
|
- `queryHandler` <[CustomQueryHandler]> The [custom query handler](#interface-customqueryhandler) to register.
|
||||||
|
|
||||||
|
Registers a [custom query handler](#interface-customqueryhandler). After registration,
|
||||||
|
the handler can be used everywhere where a selector is expected by prepending
|
||||||
|
the selection string with `<name>/`. The name is only allowed to consist of
|
||||||
|
lower- and upper case latin letters.
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
puppeteer.registerCustomQueryHandler('text', { … });
|
||||||
|
const aHandle = await page.$('text/…');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### puppeteer.unregisterCustomQueryHandler(name)
|
||||||
|
- `name` <[string]> The name of the query handler to unregistered.
|
||||||
|
|
||||||
### class: BrowserFetcher
|
### class: BrowserFetcher
|
||||||
|
|
||||||
@ -4144,6 +4171,17 @@ This method is identical to `on` and maintained for compatibility with Node's Ev
|
|||||||
|
|
||||||
This method is identical to `off` and maintained for compatibility with Node's EventEmitter. We recommend using `off` by default.
|
This method is identical to `off` and maintained for compatibility with Node's EventEmitter. We recommend using `off` by default.
|
||||||
|
|
||||||
|
### interface: CustomQueryHandler
|
||||||
|
|
||||||
|
Contains two functions `queryOne` and `queryAll` that can be
|
||||||
|
[registered](#puppeteerregistercustomqueryhandler) as
|
||||||
|
alternative querying strategies. The functions `queryOne` and `queryAll` are
|
||||||
|
executed in the page context. `queryOne` should take an `Element` and a
|
||||||
|
selector string as argument and return a single `Element` or `null` if no
|
||||||
|
element is found. `queryAll` takes the same arguments but should instead return
|
||||||
|
a `NodeListOf<Element>` or `Array<Element>` with all the elements that match
|
||||||
|
the given query selector.
|
||||||
|
|
||||||
[AXNode]: #accessibilitysnapshotoptions "AXNode"
|
[AXNode]: #accessibilitysnapshotoptions "AXNode"
|
||||||
[Accessibility]: #class-accessibility "Accessibility"
|
[Accessibility]: #class-accessibility "Accessibility"
|
||||||
[Array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array"
|
[Array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array"
|
||||||
@ -4193,3 +4231,4 @@ This method is identical to `off` and maintained for compatibility with Node's E
|
|||||||
[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String"
|
[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String"
|
||||||
[symbol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Symbol_type "Symbol"
|
[symbol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Symbol_type "Symbol"
|
||||||
[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath"
|
[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath"
|
||||||
|
[CustomQueryHandler]: #interface-customqueryhandler "CustomQueryHandler"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "puppeteer",
|
"name": "puppeteer",
|
||||||
"version": "5.3.1-post",
|
"version": "5.4.0",
|
||||||
"description": "A high-level API to control headless Chrome over the DevTools Protocol",
|
"description": "A high-level API to control headless Chrome over the DevTools Protocol",
|
||||||
"main": "./cjs-entry.js",
|
"main": "./cjs-entry.js",
|
||||||
"repository": "github:puppeteer/puppeteer",
|
"repository": "github:puppeteer/puppeteer",
|
||||||
|
@ -139,7 +139,7 @@ export class Puppeteer {
|
|||||||
* @param queryHandler - The {@link CustomQueryHandler | custom query handler} to
|
* @param queryHandler - The {@link CustomQueryHandler | custom query handler} to
|
||||||
* register.
|
* register.
|
||||||
*/
|
*/
|
||||||
__experimental_registerCustomQueryHandler(
|
registerCustomQueryHandler(
|
||||||
name: string,
|
name: string,
|
||||||
queryHandler: CustomQueryHandler
|
queryHandler: CustomQueryHandler
|
||||||
): void {
|
): void {
|
||||||
@ -149,21 +149,21 @@ export class Puppeteer {
|
|||||||
/**
|
/**
|
||||||
* @param name - The name of the query handler to unregistered.
|
* @param name - The name of the query handler to unregistered.
|
||||||
*/
|
*/
|
||||||
__experimental_unregisterCustomQueryHandler(name: string): void {
|
unregisterCustomQueryHandler(name: string): void {
|
||||||
unregisterCustomQueryHandler(name);
|
unregisterCustomQueryHandler(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns a list with the names of all registered custom query handlers.
|
* @returns a list with the names of all registered custom query handlers.
|
||||||
*/
|
*/
|
||||||
__experimental_customQueryHandlerNames(): string[] {
|
customQueryHandlerNames(): string[] {
|
||||||
return customQueryHandlerNames();
|
return customQueryHandlerNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears all registered handlers.
|
* Clears all registered handlers.
|
||||||
*/
|
*/
|
||||||
__experimental_clearQueryHandlers(): void {
|
clearCustomQueryHandlers(): void {
|
||||||
clearCustomQueryHandlers();
|
clearCustomQueryHandlers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ export interface InternalQueryHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains two functions `queryOne` and `queryAll` that can
|
* Contains two functions `queryOne` and `queryAll` that can
|
||||||
* be {@link Puppeteer.__experimental_registerCustomQueryHandler | registered}
|
* be {@link Puppeteer.registerCustomQueryHandler | registered}
|
||||||
* as alternative querying strategies. The functions `queryOne` and `queryAll`
|
* as alternative querying strategies. The functions `queryOne` and `queryAll`
|
||||||
* are executed in the page context. `queryOne` should take an `Element` and a
|
* are executed in the page context. `queryOne` should take an `Element` and a
|
||||||
* selector string as argument and return a single `Element` or `null` if no
|
* selector string as argument and return a single `Element` or `null` if no
|
||||||
|
@ -286,14 +286,14 @@ describe('ElementHandle specs', function () {
|
|||||||
describe('Custom queries', function () {
|
describe('Custom queries', function () {
|
||||||
this.afterEach(() => {
|
this.afterEach(() => {
|
||||||
const { puppeteer } = getTestState();
|
const { puppeteer } = getTestState();
|
||||||
puppeteer.__experimental_clearQueryHandlers();
|
puppeteer.clearCustomQueryHandlers();
|
||||||
});
|
});
|
||||||
it('should register and unregister', async () => {
|
it('should register and unregister', async () => {
|
||||||
const { page, puppeteer } = getTestState();
|
const { page, puppeteer } = getTestState();
|
||||||
await page.setContent('<div id="not-foo"></div><div id="foo"></div>');
|
await page.setContent('<div id="not-foo"></div><div id="foo"></div>');
|
||||||
|
|
||||||
// Register.
|
// Register.
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getById', {
|
puppeteer.registerCustomQueryHandler('getById', {
|
||||||
queryOne: (element, selector) =>
|
queryOne: (element, selector) =>
|
||||||
document.querySelector(`[id="${selector}"]`),
|
document.querySelector(`[id="${selector}"]`),
|
||||||
});
|
});
|
||||||
@ -304,9 +304,11 @@ describe('ElementHandle specs', function () {
|
|||||||
element
|
element
|
||||||
)
|
)
|
||||||
).toBe('foo');
|
).toBe('foo');
|
||||||
|
const handlerNamesAfterRegistering = puppeteer.customQueryHandlerNames();
|
||||||
|
expect(handlerNamesAfterRegistering.includes('getById')).toBeTruthy();
|
||||||
|
|
||||||
// Unregister.
|
// Unregister.
|
||||||
puppeteer.__experimental_unregisterCustomQueryHandler('getById');
|
puppeteer.unregisterCustomQueryHandler('getById');
|
||||||
try {
|
try {
|
||||||
await page.$('getById/foo');
|
await page.$('getById/foo');
|
||||||
throw new Error('Custom query handler name not set - throw expected');
|
throw new Error('Custom query handler name not set - throw expected');
|
||||||
@ -317,11 +319,13 @@ describe('ElementHandle specs', function () {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
const handlerNamesAfterUnregistering = puppeteer.customQueryHandlerNames();
|
||||||
|
expect(handlerNamesAfterUnregistering.includes('getById')).toBeFalsy();
|
||||||
});
|
});
|
||||||
it('should throw with invalid query names', () => {
|
it('should throw with invalid query names', () => {
|
||||||
try {
|
try {
|
||||||
const { puppeteer } = getTestState();
|
const { puppeteer } = getTestState();
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('1/2/3', {
|
puppeteer.registerCustomQueryHandler('1/2/3', {
|
||||||
queryOne: () => document.querySelector('foo'),
|
queryOne: () => document.querySelector('foo'),
|
||||||
});
|
});
|
||||||
throw new Error(
|
throw new Error(
|
||||||
@ -338,7 +342,7 @@ describe('ElementHandle specs', function () {
|
|||||||
await page.setContent(
|
await page.setContent(
|
||||||
'<div id="not-foo"></div><div class="foo">Foo1</div><div class="foo baz">Foo2</div>'
|
'<div id="not-foo"></div><div class="foo">Foo1</div><div class="foo baz">Foo2</div>'
|
||||||
);
|
);
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getByClass', {
|
puppeteer.registerCustomQueryHandler('getByClass', {
|
||||||
queryAll: (element, selector) =>
|
queryAll: (element, selector) =>
|
||||||
document.querySelectorAll(`.${selector}`),
|
document.querySelectorAll(`.${selector}`),
|
||||||
});
|
});
|
||||||
@ -360,7 +364,7 @@ describe('ElementHandle specs', function () {
|
|||||||
await page.setContent(
|
await page.setContent(
|
||||||
'<div id="not-foo"></div><div class="foo">Foo1</div><div class="foo baz">Foo2</div>'
|
'<div id="not-foo"></div><div class="foo">Foo1</div><div class="foo baz">Foo2</div>'
|
||||||
);
|
);
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getByClass', {
|
puppeteer.registerCustomQueryHandler('getByClass', {
|
||||||
queryAll: (element, selector) =>
|
queryAll: (element, selector) =>
|
||||||
document.querySelectorAll(`.${selector}`),
|
document.querySelectorAll(`.${selector}`),
|
||||||
});
|
});
|
||||||
@ -373,7 +377,7 @@ describe('ElementHandle specs', function () {
|
|||||||
});
|
});
|
||||||
it('should wait correctly with waitForSelector', async () => {
|
it('should wait correctly with waitForSelector', async () => {
|
||||||
const { page, puppeteer } = getTestState();
|
const { page, puppeteer } = getTestState();
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getByClass', {
|
puppeteer.registerCustomQueryHandler('getByClass', {
|
||||||
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
||||||
});
|
});
|
||||||
const waitFor = page.waitForSelector('getByClass/foo');
|
const waitFor = page.waitForSelector('getByClass/foo');
|
||||||
@ -391,7 +395,7 @@ describe('ElementHandle specs', function () {
|
|||||||
/* page.waitFor is deprecated so we silence the warning to avoid test noise */
|
/* page.waitFor is deprecated so we silence the warning to avoid test noise */
|
||||||
sinon.stub(console, 'warn').callsFake(() => {});
|
sinon.stub(console, 'warn').callsFake(() => {});
|
||||||
const { page, puppeteer } = getTestState();
|
const { page, puppeteer } = getTestState();
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getByClass', {
|
puppeteer.registerCustomQueryHandler('getByClass', {
|
||||||
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
||||||
});
|
});
|
||||||
const waitFor = page.waitFor('getByClass/foo');
|
const waitFor = page.waitFor('getByClass/foo');
|
||||||
@ -409,7 +413,7 @@ describe('ElementHandle specs', function () {
|
|||||||
await page.setContent(
|
await page.setContent(
|
||||||
'<div id="not-foo"></div><div class="foo"><div id="nested-foo" class="foo"/></div><div class="foo baz">Foo2</div>'
|
'<div id="not-foo"></div><div class="foo"><div id="nested-foo" class="foo"/></div><div class="foo baz">Foo2</div>'
|
||||||
);
|
);
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getByClass', {
|
puppeteer.registerCustomQueryHandler('getByClass', {
|
||||||
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
||||||
queryAll: (element, selector) =>
|
queryAll: (element, selector) =>
|
||||||
element.querySelectorAll(`.${selector}`),
|
element.querySelectorAll(`.${selector}`),
|
||||||
@ -426,7 +430,7 @@ describe('ElementHandle specs', function () {
|
|||||||
await page.setContent(
|
await page.setContent(
|
||||||
'<div id="not-foo"></div><div class="foo">text</div><div class="foo baz">content</div>'
|
'<div id="not-foo"></div><div class="foo">text</div><div class="foo baz">content</div>'
|
||||||
);
|
);
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('getByClass', {
|
puppeteer.registerCustomQueryHandler('getByClass', {
|
||||||
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
queryOne: (element, selector) => element.querySelector(`.${selector}`),
|
||||||
queryAll: (element, selector) =>
|
queryAll: (element, selector) =>
|
||||||
element.querySelectorAll(`.${selector}`),
|
element.querySelectorAll(`.${selector}`),
|
||||||
|
@ -411,7 +411,14 @@ describe('querySelector', function () {
|
|||||||
};
|
};
|
||||||
before(() => {
|
before(() => {
|
||||||
const { puppeteer } = getTestState();
|
const { puppeteer } = getTestState();
|
||||||
puppeteer.__experimental_registerCustomQueryHandler('allArray', handler);
|
puppeteer.registerCustomQueryHandler('allArray', handler);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should have registered handler', async () => {
|
||||||
|
const { puppeteer } = getTestState();
|
||||||
|
expect(
|
||||||
|
puppeteer.customQueryHandlerNames().includes('allArray')
|
||||||
|
).toBeTruthy();
|
||||||
});
|
});
|
||||||
it('$$ should query existing elements', async () => {
|
it('$$ should query existing elements', async () => {
|
||||||
const { page } = getTestState();
|
const { page } = getTestState();
|
||||||
|
Loading…
Reference in New Issue
Block a user