本文へ移動
バージョン: 22.5.0

Page.evaluateHandle() メソッド

シグネチャ:

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

パラメータ

パラメータ説明
pageFunctionFunc | stringページ内で実行される関数
argsParamspageFunctionに渡される引数

戻り値

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の定義では、evaluateHandleJSHandleを返すものと仮定していますが、ElementHandleを返すことがわかっている場合は、ジェネリック引数として渡します。

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