Исключая элементы с определенными классами в Puppeteer - PullRequest
0 голосов
/ 20 ноября 2018

HTML, который я пытаюсь проанализировать с помощью Puppeteer, выглядит примерно так:

<ul>
    <li class="title"> item 1 </li>
    <li class="title hide"> item 1 </li>
</ul>

И я получаю доступ к li элементам, подобным этому:

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

Результат расширентолько для извлечения элементов без class=hide.К сожалению, hide - это класс, который дополняет title, который используется всеми элементами <li>.

Как я могу реорганизовать код Puppeteer для исключения элементов с классом hide?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

: не (.hide)

Вы должны использовать псевдокласс :not() CSS, чтобы выбрать элементы, которые не включают класс .hide:

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

.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
    };
  })
);
0 голосов
/ 20 ноября 2018

Просто добавьте :not(.hide) в строку выбора:

page.$$eval("ul > li.title:not(.hide)", nodes =>
...