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
相关产品推荐
相关产品推荐

