76 lines
2.1 KiB
Markdown
76 lines
2.1 KiB
Markdown
---
|
|
sidebar_label: ExecutionContext.evaluateHandle
|
|
---
|
|
|
|
# ExecutionContext.evaluateHandle() method
|
|
|
|
Evaluates the given function.
|
|
|
|
Unlike [evaluate](./puppeteer.executioncontext.evaluate.md), this method returns a handle to the result of the function.
|
|
|
|
This method may be better suited if the object cannot be serialized (e.g. `Map`) and requires further manipulation.
|
|
|
|
**Signature:**
|
|
|
|
```typescript
|
|
class ExecutionContext {
|
|
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 | The function to evaluate. |
|
|
| args | Params | Additional arguments to pass into the function. |
|
|
|
|
**Returns:**
|
|
|
|
Promise<[HandleFor](./puppeteer.handlefor.md)<Awaited<ReturnType<Func>>>>
|
|
|
|
A [handle](./puppeteer.jshandle.md) to the result of evaluating the function. If the result is a `Node`, then this will return an [element handle](./puppeteer.elementhandle.md).
|
|
|
|
## Example 1
|
|
|
|
```ts
|
|
const context = await page.mainFrame().executionContext();
|
|
const handle: JSHandle<typeof globalThis> = await context.evaluateHandle(() =>
|
|
Promise.resolve(self)
|
|
);
|
|
```
|
|
|
|
## Example 2
|
|
|
|
A string can also be passed in instead of a function.
|
|
|
|
```ts
|
|
const handle: JSHandle<number> = await context.evaluateHandle('1 + 2');
|
|
```
|
|
|
|
## Example 3
|
|
|
|
Handles can also be passed as `args`. They resolve to their referenced object:
|
|
|
|
```ts
|
|
const bodyHandle: ElementHandle<HTMLBodyElement> = await context.evaluateHandle(
|
|
() => {
|
|
return document.body;
|
|
}
|
|
);
|
|
const stringHandle: JSHandle<string> = await context.evaluateHandle(
|
|
body => body.innerHTML,
|
|
body
|
|
);
|
|
console.log(await stringHandle.jsonValue()); // prints body's innerHTML
|
|
// Always dispose your garbage! :)
|
|
await bodyHandle.dispose();
|
|
await stringHandle.dispose();
|
|
```
|