跳至主要內容
版本: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進行查詢,並結合這些跨陰影根的查詢。 或者,您可以使用前綴指定選擇器類型。

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),
);