2016-11-23 10 views
1

PhantomJSでページを読み込み、.pngとして保存しようとしました。しかし、作成されたpngは元のようには見えず、体のほとんどが欠けています。オンラインで検索すると、同様の問題のほとんどは、ページを読み込むのに十分な時間がかかりませんでした。しかし、それは私の問題を解決していません。これは私が走っているものです:PhantomJSが動的コンテンツを読み込んでいません

var page = require('webpage').create(); 
var websiteAddress = 'http://poe.ninja/standard/currency'; 
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'; 
//viewportSize being the actual size of the headless browser 
page.viewportSize = { width: 1920, height: 1080 }; 
//the clipRect is the portion of the page you are taking a screenshot of 
page.clipRect = { top: 0, left: 0, width: 1920, height: 1080 }; 

page.open(websiteAddress, function (status) { 
    setTimeout(function(){ 
     page.render('output.png'); 
     phantom.exit(); 
    }, 5000); // 5 sec should be enough 
}); 

私は何か間違っているか、これはPhantomJSのバグですか?

期待

Expected 実際:開始と完了し、リソースのダウンロードの集計を維持するActual

+1

は[page.onError](http://phantomjs.org/api/webpage/handlerを追加/on-error.html)callbackを実行してエラーがないかどうかを確認します。 – Vaviloff

答えて

0

使用page.onResourceRequested = function(request) {}page.onResourceReceived = function(response) {}コールバックここ

は、それがどのようなものかのイメージとそれが実際のように見えます。 onResourceReceivedコールバックですべてのダウンロードが完了したことが検出されたら、page.render()に電話してください。これは、5秒のタイムアウトよりも信頼性が高くなります。

onResourceReceivedが最後に保留中のリソースが終了してから追加のダウンロードをトリガーする可能性があるため、onResourceReceivedが0.538秒間待つことをお勧めします(page.render())。

1

ターゲットサイトはReactアプリケーションで、現在のPhantomJS(旧QTWebkitレンダリングエンジンを使用しているため)では使用できない新しいES6 JavaScriptシンタックスを使用している可能性があります。

ソリューションは、この答えに行われているように、これらの不足している方法を補うためにポリフィルライブラリを使用することです:https://stackoverflow.com/a/38471938/2715393

+0

それはそれをしました!ありがとう! – Retik

関連する問題