慕容708150
2021-04-20 17:14:24
我知道puppeteer它擁有自己的句柄而不是標準DOM元素,但是我不明白為什么我不能通過找到的元素繼續相同的查詢,因為const els = await page.$$('div.parent');for (let i = 0; i < els.length; i++) { const img = await els[i].$('img').getAttribute('src'); console.log(img); const link = await els[i].$('a').getAttribute('href'); console.log(link);}
2 回答

MYYA
TA貢獻1868條經驗 獲得超4個贊
問題
元素句柄作為Node.js和瀏覽器運行時之間的抽象層是必需的。實際的DOM元素不會發送到Node.js環境。
這意味著當您想從元素中獲取屬性時,必須將數據傳輸到瀏覽器(要使用哪個DOM元素),然后再傳輸回(結果)。
解決方案
因此,結果await els[i].$('img')
實際上不是DOM元素,而是鏈接到瀏覽器環境中的元素的包裝器。要獲取屬性,您必須使用類似elementHandle.$eval
以下的函數:
const imgSrc = await els[i].$eval('img', el => el.getAttribute('src'));
這將在querySelector
給定元素上運行該函數并執行給定函數以返回其屬性。

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
您可以使用 $eval
onst els = await page.$$('div.parent');
for (let i = 0; i < els.length; i++) {
const img = await els[i].$eval('img', i => i.getAttribute('src'));
console.log(img);
const link = await els[i].$eval('a', a => a.getAttribute('href'));
console.log(link);
}
添加回答
舉報
0/150
提交
取消