如何使用Puppeteer获取指定的元素

时间:2019-05-30 05:29:58

标签: javascript css-selectors puppeteer

一页包含两个div:

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

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

使用以下代码:

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

根据the docspage.$$eval使用document.querySelectorAll通过传递的选择器查找元素,因此我们可以告诉它检索 class2 < / em>:

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

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

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

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

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