一页包含两个div:
<div class='class1'>...</div>
<div class='class1 class2'>...</div>
使用以下代码:
let result = await page.$$eval('div.class1', nodes => {...})
获取上面的两种div,但是我只想获取divs(class ='class1')。
我该怎么做?
答案 0 :(得分:1)
根据the docs,page.$$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
为我们方便地做到了。