Скриншот PhantomJS Trading View Chart

Я использую PhantomJS для рендеринга снимка экрана виджета диаграммы Trading View:

Скрипка:

http://jsfiddle.net/exatjd8w/

Код графика торгового просмотра:

<!-- TradingView Widget BEGIN -->
<div class="tradingview-widget-container">
  <div id="tradingview_f0339"></div>
  <div class="tradingview-widget-copyright"><a href="https://www.tradingview.com/symbols/NASDAQ-AAPL/" rel="noopener" target="_blank"><span class="blue-text">AAPL chart</span></a> by TradingView</div>
  <script type="text/javascript" src="https://s3.tradingview.com/tv.js"> 
  </script>
  <script type="text/javascript">
  new TradingView.widget(
  {
  "width": 980,
  "height": 610,
  "symbol": "NASDAQ:AAPL",
  "interval": "D",
  "timezone": "Etc/UTC",
  "theme": "Light",
  "style": "1",
  "locale": "en",
  "toolbar_bg": "#f1f3f6",
  "enable_publishing": false,
  "allow_symbol_change": true,
  "container_id": "tradingview_f0339"
}
  );
  </script>
</div>

ФантомJS:

var page = require('webpage').create();

page.open('https://example.com/chart_test.php', 
    function(status) {

        console.log("Status: " + status);

        if (status === "success") {

page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {

        console.log('Status: ' + status);

        var date = new Date();
        var time = date.getTime();

        $('#main-widget-frame-container iframe').on('load', function() {
            console.log('iframe loaded, now take snapshot');
            page.render('screenshot_' + time + '.png');
            phantom.exit();
        });

    });

}

});

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

Как заставить PhantomJS сделать скриншот графика после его полной загрузки?

Спасибо вам за помощь


person cpcdev    schedule 01.09.2018    source источник
comment
SetTimeout не будет работать, потому что изображение может занять больше времени или даже загрузиться менее чем за две секунды. Вместо этого вам нужно использовать обработчик onLoad. Только что выполнил быстрый поиск в Google, и это то, что вам нужно... phantomjs .org/api/webpage/handler/on-load-finished.html После загрузки страницы мы еще не закончили. Используйте jQuery с PhantomJS, чтобы проверить, завершена ли загрузка iframe виджета... $('#main-widget-frame-container iframe').on('load', function() { console.log('iframe loaded, now take snapshot'); page.render('screenshot.png'); phantom.exit(); })   -  person decoder7283    schedule 01.09.2018
comment
@indospace.io Спасибо за ответ и помощь! Я не понимаю, где я добавляю page.onLoadFinished = function(status) не могли бы вы показать мне пример с моим фантомным кодом выше? Я пробовал несколько разных вещей без везения. Спасибо еще раз!   -  person cpcdev    schedule 01.09.2018
comment
Вы почти закончили, вы должны включить jQuery. Вот подробности, как это сделать... http://phantomjs.org/api/webpage/method/include-js.html   -  person decoder7283    schedule 02.09.2018


Ответы (1)


person    schedule
comment
У меня не установлен PhantomJS, попробуйте и дайте мне знать. Это довольно простая логика, но, как мы все знаем, Javascript может быть мамой! - person decoder7283; 02.09.2018