2015-11-12 146 views
3

我今天在許多網站上做了一些研究,爲了避免手動查看它們,我準備了phantomjs以使用建議的解決方案here來呈現它們。沒什麼特別的。循環訪問網站數組並渲染所有生成的頁面。phantomjs不呈現頁面

奇怪的是,有些網站沒有正確渲染。其中,我有這樣的一個:http://www.telegraaf.nl/

爲了簡化,我創造了另一個腳本,只運行此頁:它在沒有截圖結束

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

page.viewportSize = { width: 1920, height: 960 }; 
page.clipRect = { top: 0, left: 0, width: 1920, height: 960 }; 

page.open('http://www.telegraaf.nl/', function(status) { 
    page.render("screenshot.png"); 
    phantom.exit(); 
}); 

。與任何其他人一起測試,並完美的工作。 我忽略了什麼?

回答

6

它沒有渲染屏幕截圖,因爲頁面最初沒有<body>,因此沒有渲染。在PhantomJS的onLoadFinished事件觸發後,所有內容,包括正文,都通過JavaScript加載。

您需要稍等一下才能完成整頁加載。一個簡單的5秒的等待足以對我來說:

page.open('http://www.telegraaf.nl/', function(status) { 
    setTimeout(function(){ 
     page.render("screenshot.png"); 
     phantom.exit(); 
    }, 5000); 
}); 

當然,你可以等待更奇特的方式,以使其更加堅固並太久沒有等待:phantomjs not waiting for 「full」 page load


你可能需要運行PhantomJS --ignore-ssl-errors=true(也許--ssl-protocol=any如果PhantomJS < 1.9.8)。

+0

哈!它有效(儘管我必須在11個_problematic_網站中的8箇中等待30秒,也許我的連接非常慢)。作爲參考,在這些情況下,我不需要使用'--ignore-ssl-errors'標誌來工作,但保持設置以防萬一,這是一件好事。謝謝! – Korcholis

+0

我也不需要忽略ssl錯誤,但我注意到那裏有一些請求日誌錯誤(通過[events](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js )),所以我添加了該命令行選項,並且他們離開了。 –

+0

30秒有點多。也許你可以通過自定義廣告屏蔽來減少幾秒鐘的時間。通過'page.onResourceRequested'事件,您可以根據您的自定義條件(如請求的域)中止某些請求。 –