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

Puppeteer调用evaluate及$eval出现ReferenceError报错求助

解决Puppeteer中evaluate/$eval出现cov_xxx未定义的错误

错误原因

cov_mjds8ir32这类变量是代码覆盖率工具(如Istanbul、V8内置覆盖率)注入的标记变量。当项目开启了代码覆盖率收集(比如测试时启用nyc、jest的覆盖率功能),本地代码会被注入这些变量,但Puppeteer的evaluate/$eval方法的回调函数会被序列化后传到浏览器上下文执行,浏览器环境中没有这些覆盖率变量,因此抛出引用错误。

解决方案

  • 关闭代码覆盖率收集:如果是在测试环境运行,暂时禁用覆盖率工具(比如去掉jest的--coverage参数、修改nyc配置),或者在执行Puppeteer代码的脚本中关闭覆盖率注入。
  • 正确传递外部变量(针对$eval场景):在$eval中传递外部变量时,必须通过额外参数传入,不能直接在回调里引用本地变量。修正后的代码示例:
    const userid = 'myid';
    page = await browser.newPage();
    
    await page.goto("https://myurl.com",{timeout: 5000, waitUntil: "networkidle2"});
    // 将userid作为第三个参数传入,回调中接收使用
    await page.$eval('#input[name=userid]', (el, id) => el.value = id, userid);
    
  • 检查构建/测试配置:确认是否有构建工具(如webpack)或测试框架自动注入了覆盖率代码,调整配置仅在需要的场景启用覆盖率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:32:04