使用Puppeteer爬取页面时出现TypeError: Cannot read properties of null错误
问题分析与解决
问题原因
报错TypeError: Cannot read properties of null (reading 'textContent')的核心原因是:你用的ul li选择器范围太宽,匹配到了页面里不包含.desc a元素的li节点。当代码尝试对这些节点读取textContent时,因为querySelector('.desc a')返回了null,自然没法获取属性,直接抛出错误。
页面里大概率存在其他无关的ul li(比如导航栏、页脚的列表),这些li的结构和目标简历列表完全不同,根本没有.desc a这个子元素。
解决方案
方案1:用更精准的目标选择器
直接用你提到的.content .template_ul_li选择器,它只会匹配简历列表区域的li节点,不会选中无关元素:
const selector = '.content .template_ul_li';
方案2:遍历前先做存在性判断
如果一定要用ul li,可以在遍历的时候先检查.desc a是否存在,有内容才提取,没有就跳过:
const articles = await page.$$eval(selector, nodes => { return nodes.map(node => { const titleEl = node.querySelector('.desc a'); // 先判断元素是否存在 if (!titleEl) { return null; // 也可以返回{ title: '无有效标题' } } let title = titleEl.textContent.trim(); title = title.replace(/[\n\r]+|[\s]{2,}/g, ", "); return { title, } }).filter(item => item !== null); // 过滤掉无效的项 });
额外优化:强化等待逻辑
你已经用了waitForSelector,可以改成等待目标标题元素加载完成,确保内容完全渲染:
// 等待具体的标题元素出现,而不是只等li await page.waitForSelector('.content .template_ul_li .desc a');
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

