使用puppeteer

时间:2018-04-26 20:21:18

标签: webgl puppeteer cesium

我正在尝试截取运行基于WebGL的Cesium页面的屏幕截图。如果我只是截取屏幕截图,页面将被加载,但webGL将不会完成加载。

如果我使用内置的networkidle0networkidle2,则不会截取屏幕截图。这是我的代码。

以下是我正在尝试拍摄的网站:https://www.arelplane.com/@arelenglish

const puppeteer = require('puppeteer');

module.exports = {
  takeScreenshot: (userId) => {
    (async () => {
      const browser = await puppeteer.launch({
        headless: false,
        args: [
          '--headless',
          '--hide-scrollbars'
        ]
      });
      const page = await browser.newPage();
      await page.goto('https://www.arelplane.com/@arelenglish', {"waitUntil" : "networkidle0"});
      await page.screenshot({path: 'example.png'});

      await browser.close();
    })();
    return "Successful API call!";
  }
}

1 个答案:

答案 0 :(得分:4)

您的代码正在说headless: false,还有一个名为--headless的参数,意思是headless: true。 Puppeteer会感到困惑。

除了笑话,这是我在网络标签上看到的内容。 enter image description here

网络标签显示它为每个资源加载了至少66个至少或超过1.5s的请求(idk为什么它在我的默认Chrome上加载速度较慢)。

page load test (click to see the report)相同,基本上表示它会加载170多个请求,大约40秒以上。

enter image description here

默认超时为30秒,但会加载数据超过90秒。

这是处理导航超时的参数。

await page.goto('https://www.arelplane.com/@arelenglish', {"waitUntil" : "networkidle0", "timeout": 0}); // timeout: 0 will disable navigation timeout

禁用超时或将其增加为120秒或该范围内的某些内容。这是我的代码,

puppeteer.launch({headless: false}).then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://www.arelplane.com/@arelenglish', {"waitUntil" : "networkidle0", "timeout": 0});
  await page.screenshot({path: "test.png"});
  await browser.close();
});

这是结果, enter image description here