Puppeteer evaluate报Cannot read properties of null错误如何解决
报错根因
这个错误的核心触发逻辑是:x.querySelector('.s-item__title--tagblock span.POSITIVE')返回了null,直接对null调用textContent属性就会抛出类型错误。具体触发场景有三个:
- eBay搜索结果的
.s-item列表第一个节点是平台自带的非商品占位项,内部没有你要找的售出日期标签,全量遍历的时候第一个节点就会触发空值错误 - 判空逻辑顺序写反,且空值合并运算符写法错误:原代码是先取
textContent再做判空,空值逻辑根本来不及执行;另外? ?是非法语法,正确写法是?? - 只等待了
.s-item外层节点加载,没有等待内部的日期子元素渲染完成,部分节点加载时内部标签还没挂载,也会出现匹配不到的情况
修复方案
按以下步骤调整代码即可:
- 遍历商品列表时跳过第一个占位节点,eBay该类搜索页第一个
.s-item固定为引导/广告占位,不属于真实商品条目 - 调整判空顺序:先判断选择器匹配到的元素是否存在,再读取
textContent属性,同时修正空值运算符的写法 - 增加子元素等待逻辑,等至少一个日期标签渲染完成后再执行DOM抓取,避免渲染时序问题
- 补全遗漏的基础逻辑:比如引入puppeteer、执行完抓取后关闭浏览器实例,避免内存泄漏
修正后可运行代码
const puppeteer = require('puppeteer'); async function scrape() { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); // 配置常规UA避免被反爬识别 await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'); await page.goto('https://www.ebay.com/sch/i.html?_from=R40&_nkw=Blastoise+%282%2F102%29+%5BCelebrations%3A+Classic+Collection%5D&_sacat=0&Graded=No&_dcat=183454&rt=nc&LH_Sold=1&LH_Complete=1', { waitUntil: 'domcontentloaded' }); // 等待外层商品列表和内层日期标签都加载完成 await page.waitForSelector('.s-item'); await page.waitForSelector('.s-item__title--tagblock span.POSITIVE', { timeout: 5000 }); const cards = await page.evaluate(() => { const cardElements = document.querySelectorAll('.s-item'); // 转数组后跳过第一个占位项,遍历真实商品 return Array.from(cardElements) .slice(1) .map(item => { const dateEl = item.querySelector('.s-item__title--tagblock span.POSITIVE'); return { date: dateEl ? dateEl.textContent.trim() : null } }) // 过滤掉没有取到有效日期的条目 .filter(card => card.date); }) console.log(cards); await browser.close(); } scrape();
额外排查提示
- 如果后续还是出现匹配不到的情况,可以在
evaluate回调里打印对应节点的innerHTML,确认实际渲染的class名,eBay会不定期调整页面节点的class命名 - 不要用
Object.values转换NodeList类型,直接用Array.from兼容性和稳定性更好 - 如果遇到页面加载超时,可以适当调大
waitForSelector的timeout阈值,或者增加waitUntil: 'networkidle2'配置等网络请求空闲后再抓取
内容的提问来源于stack exchange,提问作者Medusa
相关产品推荐
相关产品推荐

