跳到主要内容
版本: 23.11.1

Page.$$eval() 方法

此方法返回所有匹配选择器的元素,并将结果数组作为第一个参数传递给 pageFunction

签名

class Page {
$$eval<
Selector extends string,
Params extends unknown[],
Func extends EvaluateFuncWith<
Array<NodeFor<Selector>>,
Params
> = EvaluateFuncWith<Array<NodeFor<Selector>>, Params>,
>(
selector: Selector,
pageFunction: Func | string,
...args: Params
): Promise<Awaited<ReturnType<Func>>>;
}

参数

参数

类型

描述

selector

选择器

用于查询页面的选择器。 可以直接传递CSS 选择器,并且Puppeteer 特定的选择器语法允许通过文本a11y 角色和名称、以及xpath 进行查询,并跨 Shadow Root 组合这些查询。 或者,您可以使用前缀来指定选择器类型。

pageFunction

函数 | 字符串

要在页面上下文中评估的函数。 将传递一个匹配元素的数组作为其第一个参数。

args

参数

要传递给 pageFunction 的任何其他参数。

返回值

Promise<Awaited<ReturnType<Func>>>

调用 pageFunction 的结果。 如果它返回一个元素,则该元素被包装在 ElementHandle 中,否则返回原始值本身。

备注

如果 pageFunction 返回一个 promise,则 $$eval 将等待 promise 解析,然后返回其值。

示例 1

// get the amount of divs on the page
const divCount = await page.$$eval('div', divs => divs.length);

// get the text content of all the `.options` elements:
const options = await page.$$eval('div > span.options', options => {
return options.map(option => option.textContent);
});

如果您正在使用 TypeScript,您可能需要为 pageFunction 的第一个参数提供显式类型。 默认情况下,它被类型化为 Element[],但您可能需要提供更具体的子类型

示例 2

await page.$$eval('input', elements => {
return elements.map(e => e.value);
});

编译器应该能够从您提供的 pageFunction 中推断出返回类型。 如果它无法做到,您可以使用泛型类型来告诉编译器您期望从 $$eval 获得的返回类型

示例 3

const allInputValues = await page.$$eval('input', elements =>
elements.map(e => e.textContent),
);