Node.js Webshot не работает с PowerBI, потому что WebGL не поддерживается Phantom.js - PullRequest
0 голосов
/ 30 апреля 2019

Этот вопрос (своего рода) следует за этим ТАКИМ вопросом от некоторое время назад.

Я уже успешно установил и протестировал 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!');
});

Я много перепутал с настройками, позволяющими очень долго рендерить, обрабатывать ошибки, настраивать размер экрана, все. Ничего не получалось, и лучший результат, который я смог получить, был жестко заданный нижний колонтитул без всех графических элементов, которые я действительно хотел.

The image, all blank save the footer.

Я был потерян, пока не наткнулся на вопрос StackOverflow, который я связал сверху. Webshot.js основан на Phantom.js, который не поддерживает WebGL. Угадайте, что PowerBI использует для визуализации своих графиков. WebGL .

Я хотел бы вынуть страницу из сборника пьес Келлифелкинса, но я не уверен, как справиться с этим решением или даже с чего начать, поскольку наши проблемы и отправные точки не совпадают.

Есть ли способ в любом случае "принудительно" сделать скриншот из-за отсутствия лучшего термина? Может, подать в Webshot параметр, имитирующий веб-страницу, соответствующую требованиям? Использовать другую библиотеку?

1 Ответ

0 голосов
/ 07 мая 2019

Я нашел решение в виде node-server-screenshot. Он имеет множество одинаковых настроек, влияющих на задержку рендеринга, масштаб, размер и качество, и работает с PowerBI и другими веб-сервисами.которые используют WebGL.

Например, фрагмент кода может выглядеть следующим образом.

    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;
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...