网页爬取时排除特定选择器元素的代码问题求助
问题解决:排除特定类的元素提取文本
你的代码存在几个关键问题:
- 语法错误:
if条件的括号仅包裹了第一个判断,||及后续判断漏在括号外;另外classes! ==多了空格,应为classes !==。 - 判断逻辑不合理:直接比较完整class字符串不可靠,元素的class顺序变化或新增其他class都会导致判断失效,正确做法是检查元素是否包含目标类。
修正后的代码:
const elements = await page.$$('.sc-bKKYHN.ejco'); const texts = []; for (let element of elements) { const hasExcludedClass = await element.evaluate(el => el.classList.contains('sc-kfhTrB') || el.classList.contains('sc-bGKsmU') ); if (!hasExcludedClass) { const text = await element.evaluate(el => el.innerText.replace(/\n/g, '/')); texts.push(text); } } const valuesString = texts.join('/');
说明:
- 使用
classList.contains()检查元素是否包含目标排除类(取每个排除选择器的第一个类即可,这类动态生成的class通常能唯一标识元素),避免因class顺序或额外class导致判断失败。 - 修正语法错误,调整逻辑为“不包含排除类时才提取文本”。
内容的提问来源于stack exchange,提问作者BadFDlower
相关产品推荐
相关产品推荐

