Согласно документам , 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
удобно делает это для нас.