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