【问题标题】:How to use Puppeteer to get the specified element如何使用 Puppeteer 获取指定元素
【发布时间】:2019-10-15 17:59:33
【问题描述】:

一个页面有两个 div:

<div class='class1'>...</div>

<div class='class1 class2'>...</div>

使用下面的代码:

let result = await page.$$eval('div.class1', nodes => {...})

获取上面的两种div,但我只想获取div(class='class1')。

我该怎么做?

【问题讨论】:

  • 你只想要第一个元素?或任何带有class="class1" 的元素
  • 我想要所有元素 class="class1" && class != 'class2',它在下面解决了,谢谢@Vaviloff

标签: javascript css-selectors puppeteer


【解决方案1】:

根据the docs,page.$$eval 使用document.querySelectorAll 来查找具有传递选择器的元素,因此我们可以告诉它不 检索class2: p>

let result = await page.$$eval('div.class1:not(.class2)', nodes => {...})

但这显然不能很好地扩展:您需要跟踪所有不应选择的其他类并不断更新代码。

最好只过滤那些具有完全必要类名的节点:

let result = await page.$$eval('.class1', nodes => 
    nodes.filter(node => node.className === "class1").map(node => node.textContent)
);

注意我们在这里不必将 nodeList 转换为数组(例如使用[...nodes] 或Array.from(nodes)),并且可以立即使用过滤器和映射。那是因为page.$$eval 方便地为我们做这件事。

【讨论】:

  • 感谢您的回答,它有效,我从您的回答中获得了更多知识!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2021-05-26
  • 2020-07-17
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多