javascript - Puppeteer:无法注入(inject)全局变量

标签 javascript html node.js puppeteer google-chrome-headless

在向其中注入(inject)一些数据后,我想截取页面的屏幕截图:

(async () => {
  const browser = await puppeteer.launch({dumpio: true});
  const page = await browser.newPage();

  await page.evaluate((data) => {
    console.log("-> evaluate");
    window.TestMe = {};
    window.TestMe.data = data;
  }, jsonData)
 
  await page.goto(url); 
 
  await page.screenshot({
    path: 'img.png',
  });
  
  await browser.close();
})();
我在这个简单的页面上进行了测试:
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<div id="content"></div>
<script>
    let hasData = window.TestMe && window.TestMe.data;
    if (!hasData) {
        console.log("ERROR: No data provided by Puppeteer at window.TestMe.data.");
    } else {
      document.getElementById("content").innerHTML = JSON.stringify(window.TestMe.data);
    }
</script>
</body>
</html>
评估似乎不起作用,因为我得到:
[0715/103457.665633:INFO:CONSOLE(2)] "-> evaluate", source: __puppeteer_evaluation_script__ (2)
[0715/103457.698770:INFO:CONSOLE(11)] "ERROR: No data provided by Puppeteer at window.TestMe.data.", source: http://localhost:8989/ (11)
我究竟做错了什么?

最佳答案

我能够在 SO 的单独答案中找到解决方案:

Puppeteer: unable to inject global variable

使用:

  await page.evaluateOnNewDocument((data) => {
    window.TestMe = {};
    window.TestMe.data = data;
  }, jsonData);

关于javascript - Puppeteer:无法注入(inject)全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51346709/

相关文章:

node.js - 如何使用 NodeJS 捕获全局错误

javascript - 如何在node.js中订阅广播地址(255.255.255.255)

javascript - AngularJS 递归模板默认关闭所有节点并使用 ng-click 展开它们

javascript - 使用索引作为 ID VueJS 的动态模态

javascript - 在这种情况下使用 CSS 或 Jquery 有什么区别

javascript - 在移动设备上隐藏部分网站

html - 使两个元素等高,一个带有垂直滚动条

javascript - 动态要求和取消要求文件

html - 如何使用 css 样式,在一列中使用可用宽度,另一列使用它需要的宽度

node.js - 如何从 NodeJS 在 MongoDB 中同时设置和取消设置?