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 | 參數 | 要傳遞給 |
傳回
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),
);