You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppeteer page.evaluate返回值与DevTools控制台结果不一致

问题结论

这不是Puppeteer的原生bug,属于代码写法错误。

错误原因

你传入page.evaluate的异步函数没有显式返回计算结果:函数内只写了await + Promise链式调用,但没有把Promise最终resolve的值return出去,函数默认返回undefined,因此外层拿到的结果永远是undefined。
你在DevTools控制台执行相同代码能看到正确结果,是因为浏览器控制台默认会输出顶层执行Promise的resolve值,这个行为和page.evaluate的返回规则不一致——page.evaluate只会序列化传入函数的显式返回值,没有return就只能拿到undefined。

修正代码

推荐两种可正常运行的写法,同时增加了边界判断,避免无SW注册、SW未进入active状态时抛出异常:

  • async/await 写法:
const isCorrectSW = await page.evaluate(async () => {
  const registrations = await navigator.serviceWorker.getRegistrations();
  // 兜底判断,避免访问undefined属性报错
  return registrations[0]?.active?.scriptURL.endsWith('/target.js') ?? false;
});
  • Promise链写法:
const isCorrectSW = await page.evaluate(() => {
  // 直接return整个Promise链,evaluate会等待Promise resolve后返回结果
  return navigator.serviceWorker.getRegistrations()
    .then(registrations => registrations[0]?.active?.scriptURL.endsWith('/target.js') ?? false);
});

注意:原写法里硬等10秒的逻辑并不稳妥,如果要精准等待SW注册完成,也可以用page.waitForFunction轮询判断结果,替代固定时长等待。

内容的提问来源于stack exchange,提问作者rschristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:31:14