使用puppeteer-core无法通过pageSize参数获取全部商品列表
问题分析与解决方案
你的问题核心是:URL里指定了pageSize=1000但实际只拿到24条数据,和浏览器默认一致。这说明网站可能未识别到你的分页参数,或者页面动态加载的内容还没渲染完成,再加上用jsdom解析静态HTML的方式,大概率错过了异步加载的商品数据。
可能的原因
- 网站对
pageSize参数有上限限制,强制最大仅返回24条,即使传1000也无效 - 页面商品列表是AJAX动态加载的,
networkidle2的等待时机太早,异步请求还没完成就获取了页面内容 - 用jsdom解析静态HTML的方式,无法获取Puppeteer浏览器中动态渲染后的完整DOM结构
- 网站通过反爬机制识别到爬虫,直接返回默认分页数据
解决方案
1. 先验证参数有效性
直接在浏览器中打开你指定的URL,查看页面是否真的加载了774个商品。如果浏览器里也只显示24条,说明网站不支持这么大的pageSize,需要改成网站允许的最大值,或者改成多页循环爬取。
2. 改用Puppeteer内置的页面求值能力,放弃jsdom
Puppeteer的page.evaluate()可以直接在浏览器环境中执行JS,能获取动态渲染后的完整DOM,比把HTML导出到jsdom解析更可靠。
3. 优化页面等待逻辑
可以等待特定商品容器加载完成,或者改用更彻底的网络等待策略,确保异步数据加载完毕。
修改后的代码示例
const puppeteer = require('puppeteer-core'); async function test() { const browser = await puppeteer.launch({ // 本地Chrome需指定路径,示例:Windows为'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' // executablePath: '/path/to/your/chrome', defaultViewport: { width: 1280, height: 720 } // 模拟真实视口,降低反爬识别概率 }); const page = await browser.newPage(); await page.setDefaultNavigationTimeout(0); // 设置真实User-Agent,避免被标记为爬虫 await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); await page.goto("https://www.liveauctioneers.com/catalog/256884_8-27-22-cameo-cut-glass-art-glass-and-more/?page=1&pageSize=1000", { waitUntil: "networkidle0" // 等待所有网络请求完成,比networkidle2更彻底 }); // 等待目标商品容器加载完成,确保异步内容渲染完毕 await page.waitForSelector('.CatalogPageItems__StyledContainer-sc-y0p083-0.bLuQEb', { timeout: 30000 }); // 在浏览器环境中直接统计商品数量 const itemCount = await page.evaluate(() => { const container = document.querySelector('.CatalogPageItems__StyledContainer-sc-y0p083-0.bLuQEb'); if (!container) return 0; // 替换为实际商品元素的选择器,比如如果商品是带特定类的div,就用container.querySelectorAll('.your-item-class').length return container.querySelectorAll('div').length; }); console.log(itemCount); await browser.close(); } test();
额外提示
- 如果网站确实限制了
pageSize最大值,需要循环爬取多页数据,每次递增page参数 - 可以监听页面的网络请求,找到加载商品列表的API接口,直接请求API会比爬页面更高效稳定
- 避免频繁连续请求,添加适当延迟,防止被网站封禁IP
内容的提问来源于stack exchange,提问作者MidnightTreason
相关产品推荐
相关产品推荐

