循环处理句柄以获取内部元素文本

时间:2019-09-27 22:55:43

标签: puppeteer

我已经检索了类的所有元素(“ .col.double.societe.u2d.hasLogo”),我想循环它们中的每一个以检索类('.dresse')文本

我的代码是:

const societeHandles = await page.$$('.col.double.societe.u2d.hasLogo');
for(const societeHandle of societeHandles){
     const adresse = await societeHandle.$eval(".adresse");

但是我遇到运行错误错误:未能找到与选择器“ .adresse”匹配的元素

教室在那里:

<p class="adresse">
   325 rue Pasteur
   <br><a href="/annuaire/aquitaine/gironde/bordeaux">33200 Bordeaux</a>
   <br><a href="/annuaire/aquitaine/gironde">Gironde</a>
   <br><a href="/annuaire/aquitaine">Aquitaine</a>
 </p>

我允许这样做吗?还是语法错误? 谢谢

1 个答案:

答案 0 :(得分:1)

由于您选择要定位所有元素的选择器,因此操纵up的人无法找到address元素,这可能太具体了。尝试.col.double.societe

require('puppeteer').launch().then(async browser => {
  const page = await browser.newPage();

  await page.goto('http://www.dollmedia-btp.com/annuaire/aquitaine/gironde/bordeaux');

    const societeHandles = await page.$$('.col.double.societe');

    // Have we got any addresses?
    console.log("Total count: " + societeHandles.length)

    for(const societeHandle of societeHandles){
        const adresse = await societeHandle.$eval(".adresse", el => el.textContent.trim());
        console.log(adresse + "\n")
    }

  await browser.close();
});

记录请求期间是否找到任何东西也是一种方便的做法,因此我记录了找到的节点数。

还请注意handle.$eval的正确用法:您向函数传递了selectorfunction以便在浏览器上下文中执行。 (在我的示例中,我只是从找到的元素中返回文本)