在 Puppeteer 中排除具有某些类的元素

The*_*asn 2 javascript css node.js google-chrome-devtools puppeteer

我试图用 Puppeteer 解析的 HTML 看起来像这样:

<ul>
    <li class="title"> item 1 </li>
    <li class="title hide"> item 1 </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我正在访问这样的li元素:

await page.$$eval("ul > li.title", nodes =>
    nodes.map(element => {
      return {
        //some attributes
      };
    })
  );
Run Code Online (Sandbox Code Playgroud)

扩展的结果是只检索没有class=hide. 不幸的hide是,除了 之外还有一个类title,它由所有<li>元素共享。

如何重构 Puppeteer 代码以排除具有hide类的元素?

Gra*_*ler 5

:不(。隐藏)

您应该使用:not()CSS 伪类来选择不包含 class 的元素.hide

await page.$$eval('ul > li.title:not(.hide)', nodes =>
  nodes.map(element => {
    return {
      // some attributes
    };
  })
);
Run Code Online (Sandbox Code Playgroud)

.filter(e => !e.matches('.hide'))

在另一方面,你也可以filter()nodes,只包括不元素matches()的的.hide选择器字符串:

await page.$$eval('ul > li.title', nodes =>
  nodes.filter(e => !e.matches('.hide')).map(element => {
    return {
      // some attributes
    };
  })
);
Run Code Online (Sandbox Code Playgroud)