Skip to main content

JSHandle

JSHandle 表示页内 JavaScript 对象。JSHandles 可以使用 page.evaluateHandle() 方法创建。

JSHandle represents an in-page JavaScript object. JSHandles can be created with the page.evaluateHandle() method.

const windowHandle = await page.evaluateHandle(() => window);
// ...

JSHandle 会阻止引用的 JavaScript 对象被垃圾回收,除非该句柄通过 jsHandle.dispose() 公开。当导航其原始框架或父上下文被破坏时,JSHandles 会自动处置。

JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with jsHandle.dispose(). JSHandles are auto-disposed when their origin frame gets navigated or the parent context gets destroyed.

JSHandle 实例可以用作 page.$eval()page.evaluate()page.evaluateHandle() 方法中的参数。

JSHandle instances can be used as an argument in page.$eval(), page.evaluate() and page.evaluateHandle() methods.


方法

Methods

asElement

Added in: v1.8 jsHandle.asElement

如果对象句柄是 ElementHandle 的实例,则返回 null 或对象句柄本身。

Returns either null or the object handle itself, if the object handle is an instance of ElementHandle.

用法

Usage

jsHandle.asElement();

返回

Returns


dispose

Added in: v1.8 jsHandle.dispose

jsHandle.dispose 方法停止引用元素句柄。

The jsHandle.dispose method stops referencing the element handle.

用法

Usage

await jsHandle.dispose();

evaluate

Added in: v1.8 jsHandle.evaluate

返回 pageFunction 的返回值。

Returns the return value of pageFunction.

此方法将此句柄作为第一个参数传递给 pageFunction

This method passes this handle as the first argument to pageFunction.

如果 pageFunction 返回 Promise,那么 handle.evaluate 将等待 Promise 解析并返回其值。

If pageFunction returns a Promise, then handle.evaluate would wait for the promise to resolve and return its value.

用法

Usage

const tweetHandle = await page.$('.tweet .retweets');
expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');

参数

Arguments

要在页面上下文中评估的函数。

Function to be evaluated in the page context.

传递给 pageFunction 的可选参数。

Optional argument to pass to pageFunction.

返回

Returns


evaluateHandle

Added in: v1.8 jsHandle.evaluateHandle

pageFunction 的返回值作为 JSHandle 返回。

Returns the return value of pageFunction as a JSHandle.

此方法将此句柄作为第一个参数传递给 pageFunction

This method passes this handle as the first argument to pageFunction.

jsHandle.evaluatejsHandle.evaluateHandle 之间的唯一区别是 jsHandle.evaluateHandle 返回 JSHandle

The only difference between jsHandle.evaluate and jsHandle.evaluateHandle is that jsHandle.evaluateHandle returns JSHandle.

如果传递给 jsHandle.evaluateHandle 的函数返回 Promise,那么 jsHandle.evaluateHandle 将等待 Promise 解析并返回其值。

If the function passed to the jsHandle.evaluateHandle returns a Promise, then jsHandle.evaluateHandle would wait for the promise to resolve and return its value.

详细信息请参见 page.evaluateHandle()

See page.evaluateHandle() for more details.

用法

Usage

await jsHandle.evaluateHandle(pageFunction);
await jsHandle.evaluateHandle(pageFunction, arg);

参数

Arguments

要在页面上下文中评估的函数。

Function to be evaluated in the page context.

传递给 pageFunction 的可选参数。

Optional argument to pass to pageFunction.

返回

Returns


getProperties

Added in: v1.8 jsHandle.getProperties

该方法返回一个映射,其中自己的属性名称作为键,JSHandle 实例作为属性值。

The method returns a map with own property names as keys and JSHandle instances for the property values.

用法

Usage

const handle = await page.evaluateHandle(() => ({ window, document }));
const properties = await handle.getProperties();
const windowHandle = properties.get('window');
const documentHandle = properties.get('document');
await handle.dispose();

返回

Returns


getProperty

Added in: v1.8 jsHandle.getProperty

从引用的对象中获取单个属性。

Fetches a single property from the referenced object.

用法

Usage

await jsHandle.getProperty(propertyName);

参数

Arguments

获得的属性

property to get

返回

Returns


jsonValue

Added in: v1.8 jsHandle.jsonValue

返回对象的 JSON 表示形式。如果对象有 toJSON 函数,则不会调用它。

Returns a JSON representation of the object. If the object has a toJSON function, it will not be called.

注意

如果引用的对象不可字符串化,该方法将返回一个空的 JSON 对象。如果对象有循环引用,则会抛出错误。

The method will return an empty JSON object if the referenced object is not stringifiable. It will throw an error if the object has circular references.

用法

Usage

await jsHandle.jsonValue();

返回

Returns