首页 > 解决方案 > Node.js Webshot 不适用于 PowerBI,因为 Phantom.js 不支持 WebGL

问题描述

这个问题(有点)是不久前对这个 SO 问题的跟进。

我已经成功地安装和测试了 Webshot.js——它实际上工作得很好!除了其指定的目的之外的一切。我正在截取公开/已发布的 PowerBI 报告的屏幕截图。它们是空白的。总是。

我的代码:

webshot('https://app.powerbi.com/view?r=ReallyLongURLKey', 
    './workdammit.png', function(err) {
  if (err) return console.log(err);
  console.log('Screenshot taken!');
});

我已经搞砸了很多设置,允许非常冗长的渲染延迟、错误处理、屏幕尺寸调整等等。没有任何效果,我能得到的最好结果是一个硬编码的页脚减去我真正想要的所有图形内容。

图像,所有空白保存页脚。

在遇到顶部链接的 StackOverflow 问题之前,我迷路了。Webshot.js 基于不支持 WebGL 的 Phantom.js。猜猜 PowerBI 使用什么来呈现他们的图表。WebGL

我想从 kellyfelkins 剧本中拿出一页,但我不确定如何处理这个变通方法,甚至不确定从哪里开始,因为我们的问题和起点并不完全相同。

由于缺乏更好的术语,有没有办法“强制”截图?也许为 Webshot 提供一个模仿合规网页的设置?完全使用不同的库?

标签: javascriptnode.jsphantomjspowerbi

解决方案


我找到了node-server-screenshot形式的解决方案。它具有许多影响渲染延迟、缩放、大小和质量的相同设置,并且适用于 PowerBI 和其他使用 WebGL 的 Web 服务。

例如,一段代码可能看起来像这样。

    var app = require('../Node/node_modules/npm/node_modules/node-server-screenshot/index.js');
app.fromURL("https://yahoo.com", "E:/Website/Test.png", 
     { clip: {width: 1600, height: 900 }, scale: 1, waitMilliseconds: 10000, timeout: 60000 }, function (err) {
  if (err) {
    throw err;
  }
});

推荐阅读