使用Puppeteer获取元素文本返回空对象,求问题排查
问题分析与修复
你的代码存在三个关键错误,导致无法正确获取页码文本:
1. 类选择器语法错误
document.querySelector('s-pagination-item.s-pagination-disabled') 中的 s-pagination-item 缺少开头的 .,这会被解析为标签选择器(寻找名为s-pagination-item的HTML标签),但实际目标元素是带有该类名的元素,必须写成类选择器:.s-pagination-item.s-pagination-disabled。
2. page.evaluate 用法错误
你把返回逻辑放在了page.evaluate的第二个参数里,不符合Puppeteer的API规范:page.evaluate的第二个参数是传递给回调函数的参数,而非返回逻辑。正确的做法是在回调函数内部直接获取元素文本并返回。
3. 变量声明与空值处理缺失
使用var容易引发变量提升问题,建议改用let;同时未对元素存在性做判断,若元素意外不存在会直接报错。
修复后的代码
// 判断是否存在分页分隔符(多页场景) const hasPaginationSeparator = await page.$('.s-pagination-item.s-pagination-next.s-pagination-button.s-pagination-separator') !== null; let lastPageNumber = 1; if (hasPaginationSeparator) { // 在浏览器上下文内获取最后一页页码 lastPageNumber = await page.evaluate(() => { const lastPageElement = document.querySelector('.s-pagination-item.s-pagination-disabled'); // 确保元素存在时再取文本,避免报错 return lastPageElement ? lastPageElement.innerText.trim() : '1'; }); } // 转换为数字类型(可选,根据需求调整) lastPageNumber = parseInt(lastPageNumber, 10);
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

