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.evaluate 和 page.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>(...);