跳至主要內容
版本:23.11.1

Page.evaluateHandle() 方法

簽名

class Page {
evaluateHandle<
Params extends unknown[],
Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
>(
pageFunction: Func | string,
...args: Params
): Promise<HandleFor<Awaited<ReturnType<Func>>>>;
}

參數

參數

類型

描述

pageFunction

Func | string

在頁面內執行的函數

args

Params

要傳遞給 pageFunction 的參數

返回

Promise<HandleFor<Awaited<ReturnType<Func>>>>

備註

page.evaluatepage.evaluateHandle 之間唯一的區別在於 evaluateHandle 會將值包裝在頁面內的物件中返回。

如果傳遞給 page.evaluateHandle 的函數返回一個 Promise,該函數將等待 Promise 解析並返回其值。

您可以傳遞字串而不是函數(雖然建議使用函數,因為它們更容易除錯並且更容易與 TypeScript 一起使用)

範例 1

const aHandle = await page.evaluateHandle('document');

範例 2

JSHandle 實例可以作為參數傳遞給 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();

大多數情況下,此函數會返回一個 JSHandle,但如果 pageFunction 返回對元素的引用,您會得到一個 ElementHandle

範例 3

const button = await page.evaluateHandle(() =>
document.querySelector('button'),
);
// can call `click` because `button` is an `ElementHandle`
await button.click();

TypeScript 定義假設 evaluateHandle 返回一個 JSHandle,但如果您知道它將返回一個 ElementHandle,請將其作為泛型參數傳遞

const button = await page.evaluateHandle<ElementHandle>(...);