Puppeteer页面无法读取Cookie 自动生成客户过期库存通知PDF问题问询
问题根因
你操作Cookie的执行顺序错误:
你在代码中先调用page.goto('http://localhost:1234/testing')加载页面,此时页面内的<script>会立即执行,打印document.cookie的内容。待页面加载完成后你才调用page.setCookie()写入数据,这时候页面脚本早已执行完毕,不会重新读取新写入的Cookie,所以截图只能看到空的Cookie值。
修复方案
调整执行顺序,在访问页面前先设置Cookie即可:
const browser = await puppeteer.launch(); const page = await browser.newPage(); // 先写Cookie await page.setCookie(...myCookies); // 再访问页面,Cookie会随请求一起发送,页面加载时就能读到 await page.goto('http://localhost:1234/testing', { waitUntil: 'networkidle2' });
你后续发布的最终实现代码就是采用了这个正确顺序,所以能正常读取参数生成PDF。
可选优化建议
由于Cookie存在单条4KB左右的大小限制,如果单个客户的到期库存数据量较大,可能会出现数据截断的问题,你可以改用更直接的前端数据注入方式,不需要依赖Cookie:
- 访问页面完成后,通过
page.evaluate()直接将数据挂载到页面全局对象上 - 前端渲染逻辑直接读取全局对象的数据即可,不需要解析Cookie
示例代码:
// puppeteer侧 await page.goto('http://localhost:1234/testing'); await page.evaluate((customer, expiring) => { window.renderData = { customer, expiring }; // 也可以直接调用页面暴露的渲染函数 window.main(); }, customerData, expiringData);
内容的提问来源于stack exchange,提问作者Neil Gaetano Lindberg
相关产品推荐
相关产品推荐

