🤖 I have created a release *beep* *boop* --- <details><summary>browsers: 2.2.2</summary> ## [2.2.2](https://github.com/puppeteer/puppeteer/compare/browsers-v2.2.1...browsers-v2.2.2) (2024-04-15) ### Bug Fixes * remove NetworkServiceInProcess2 set by default ([#12261](https://github.com/puppeteer/puppeteer/issues/12261)) ([ff4f70f
](ff4f70f4ae
)), closes [#12257](https://github.com/puppeteer/puppeteer/issues/12257) </details> <details><summary>puppeteer: 22.6.5</summary> ## [22.6.5](https://github.com/puppeteer/puppeteer/compare/puppeteer-v22.6.4...puppeteer-v22.6.5) (2024-04-15) ### Miscellaneous Chores * **puppeteer:** Synchronize puppeteer versions ### Dependencies * The following workspace dependencies were updated * dependencies * puppeteer-core bumped from 22.6.4 to 22.6.5 * @puppeteer/browsers bumped from 2.2.1 to 2.2.2 </details> <details><summary>puppeteer-core: 22.6.5</summary> ## [22.6.5](https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v22.6.4...puppeteer-core-v22.6.5) (2024-04-15) ### Bug Fixes * remove NetworkServiceInProcess2 set by default ([#12261](https://github.com/puppeteer/puppeteer/issues/12261)) ([ff4f70f
](ff4f70f4ae
)), closes [#12257](https://github.com/puppeteer/puppeteer/issues/12257) * use setImmediate to reduce flakiness when processing events ([#12264](https://github.com/puppeteer/puppeteer/issues/12264)) ([73403b3
](73403b323e
)) ### Dependencies * The following workspace dependencies were updated * dependencies * @puppeteer/browsers bumped from 2.2.1 to 2.2.2 </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
2.3 KiB
sidebar_label |
---|
Page.evaluateHandle |
Page.evaluateHandle() method
Signature:
class Page {
evaluateHandle<
Params extends unknown[],
Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
>(
pageFunction: Func | string,
...args: Params
): Promise<HandleFor<Awaited<ReturnType<Func>>>>;
}
Parameters
Parameter |
Type |
Description |
---|---|---|
pageFunction |
Func | string |
a function that is run within the page |
args |
Params |
arguments to be passed to the pageFunction |
Promise<HandleFor<Awaited<ReturnType<Func>>>>
Remarks
The only difference between page.evaluate and page.evaluateHandle
is that evaluateHandle
will return the value wrapped in an in-page object.
If the function passed to page.evaluateHandle
returns a Promise, the function will wait for the promise to resolve and return its value.
You can pass a string instead of a function (although functions are recommended as they are easier to debug and use with TypeScript):
Example 1
const aHandle = await page.evaluateHandle('document');
Example 2
JSHandle instances can be passed as arguments to the pageFunction
:
const aHandle = await page.evaluateHandle(() => document.body);
const resultHandle = await page.evaluateHandle(body => body.innerHTML, aHandle);
console.log(await resultHandle.jsonValue());
await resultHandle.dispose();
Most of the time this function returns a JSHandle, but if pageFunction
returns a reference to an element, you instead get an ElementHandle back:
Example 3
const button = await page.evaluateHandle(() =>
document.querySelector('button')
);
// can call `click` because `button` is an `ElementHandle`
await button.click();
The TypeScript definitions assume that evaluateHandle
returns a JSHandle
, but if you know it's going to return an ElementHandle
, pass it as the generic argument:
const button = await page.evaluateHandle<ElementHandle>(...);