【问题标题】:Puppeteer: unable to inject global variablePuppeteer:无法注入全局变量
【发布时间】:2018-12-23 02:37:04
【问题描述】:

我想在向其中注入一些数据后对页面进行截图:

(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)

我做错了什么?

【问题讨论】:

  • 只要你的注入是异步的并且你的脚本是同步的并且放在开头,它可能还没有加载。你的注入代码放在哪里?
  • @Drag13 谢谢。对于这种特定情况,我该如何解决这个问题?
  • 是否有与 PhantomJS 的 onInitialized 等效的木偶操作者? (phantomjs.org/api/webpage/handler/on-initialized.html)

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


【解决方案1】:

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

Puppeteer: unable to inject global variable

使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多