Как использовать Puppeteer для получения указанного элемента - PullRequest
3 голосов
/ 30 мая 2019

Одна страница имеет два деления:

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

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

Используйте код ниже:

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

получить два вида div выше, но я просто хочу получить div (class = 'class1').

Как я могу это сделать?

1 Ответ

1 голос
/ 30 мая 2019

Согласно документам , page.$$eval использует document.querySelectorAll для поиска элементов с переданным селектором, поэтому мы можем сказать ему , а не для получения class2 :

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)
);

Обратите внимание, что нам не нужно конвертировать нодлист в массив здесь (например, с [...nodes] или Array.from(nodes)), и мы можем сразу использовать фильтр и карту. Это потому, что page.$$eval удобно делает это для нас.

...