2014-10-16 73 views
23

我知道有某些網頁PhantomJS/CasperJS無法打開,我想知道這個是否是其中之一:https://maizepages.umich.edu。 CasperJS給出錯誤:PhantomJS無法打開頁面狀態=失敗。CasperJS/PhantomJS不加載https頁面

我試着忽略ssl錯誤和更改我的用戶代理,但我不知道如何確定使用哪些。

我現在正在做的是基本的casper設置與casper.start(url, function() { ... })其中url=https://maizepages.umich.edu;

+0

[PhantomJS未能打開HTTPS站點]的可能重複(http://stackoverflow.com/questions/12021578/ph​​antomjs-failing-to-open-https-site) – 2014-10-17 07:12:10

回答

65

該問題可能與最近發現的SSLv3漏洞(POODLE)有關。網站所有者被迫從他們的網站刪除SSLv3支持。由於PhantomJS < v1.9.8使用的SSLv3通過default,你應該使用的TLSv1:

casperjs --ssl-protocol=tlsv1 yourScript.js 

的包羅萬象的解決辦法是使用any因爲當新PhantomJS版本與其他SSL協議一起去。但是,這會使尚未禁用SSLv3的網站上的POODLE漏洞被利用。

casperjs --ssl-protocol=any yourScript.js 

替代方法:更新到PhantomJS 1.9.8或更高版本。請注意,更新到PhantomJS 1.9.8會導致new bug,這對CasperJS尤其惱人。

如何驗證:在腳本的開頭添加一個resource.error事件處理程序是這樣的:

casper.on("resource.error", function(resourceError){ 
    console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')'); 
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString); 
}); 

如果它確實是與SSLv3的問題的錯誤將是這樣的:

Error code: 6. Description: SSL handshake failed


順便說一句,你也可能想要運行--ignore-ssl-errors=true命令行選項,當有用證書來判斷錯誤。

+0

即使使用TLSv1,我也遇到同樣的錯誤。 CasperJS是否還有其他常見的SSL協議? – 2014-10-18 04:01:11

+0

這很奇怪,因爲[this](https://gist.github.com/artjomb/d837bad756bd74735f33)爲我製作了一個合適的[截圖](http://i.imgur.com/fK4hHfk.png)。如果您使用的PhantomJS版本比1.9.7更舊,您應該更新。 – 2014-10-18 07:08:05

+0

這給了我希望!我使用'phantomjs --version'檢查了我的安裝版本,它給了我1.8.2,但是當我做'釀造信息phantomjs'時它說了1.9.7。我不知道如何去尋找1.8.2版本的安裝位置。我會調查是否可以從命令行更新PhantomJS。我的卡斯帕是1.0.4。作爲便箋,你知道如何格式化PhantomJS/CasperJS使用的cookies.json文件嗎? – 2014-10-18 19:22:59