亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過Puppeteer獲取元素的子代

如何通過Puppeteer獲取元素的子代

慕容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給定元素上運行該函數并執行給定函數以返回其屬性。


查看完整回答
反對 回復 2021-04-29
?
收到一只叮咚

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

}


查看完整回答
反對 回復 2021-04-29
  • 2 回答
  • 0 關注
  • 573 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號