2015-04-20 70 views
0

我试图,由于PhantomJS,刮这个网页:https://www.koshkamashkaeshop.com/fr/28-robes-Koshka-Mashka 但它无法加载每一次。我认为这是因为https。 这里是我的代码.SH:Phantomjs无法加载地址

phantomjs --ignore-ssl-errors=yes test.js 

这里是我的test.js代码:

page.open(url, function (status) { 

var content = page.evaluate(function() 
{ 
    if (status !== 'success') { 
    console.log('FAIL to load the address'); 
    }else{ 

    } 
} 
)}) 
+0

您有什么PhantomJS版本,并且在使用'--ssl-protocol = any'选项调用PhantomJS时会执行页面加载吗? –

+0

我有1.9版本。我试过--ssl-protocol =任何但不工作 – Zoomzoom

回答

2

这是因为在Phantomjs connection to Facebook fails SSL handshake描述了同样的问题:Phantomjs默认为SSL 3.0和很多网站有SSL 3.0已禁用。您需要使用

phantomjs --ssl-protocol=any test.js 
+0

我试过--ssl-protocol = any但不工作 – Zoomzoom

+0

SSL部分适用于1.9.0。但是SSL连接后似乎还有其他问题。 –

1

page.evaluate()是PhantomJS中的沙盒页面上下文。它无法访问外部定义的变量。另外,如果您想要从页面上下文中看到控制台消息,则需要注册到page.onConsoleMessage事件。在这种情况下,您不需要页面上下文。

的另一个问题是,PhantomJS版本< 1.9.8使用SSLv3的默认,但因为狮子狗漏洞大多数网络服务器已禁用SSLv3的支持,所以你需要明确添加--ssl-protocol=tlsv1命令行选项。

与PhantomJS 1.9.0工作代码:

page.open(url, function (status) { 
    console.log("status: " + status); 
    phantom.exit(); 
}); 

当然,如果你真的想要的状态传递到无论什么原因,页面上下文,你需要明确地传递:

page.onConsoleMessage = function(msg){ 
    console.log("page: " + msg); 
}; 
page.open(url, function (status) { 
    page.evaluate(function(status){ 
     console.log("status: " + status); 
    }, status); 
    phantom.exit(); 
}); 
+0

我尝试了你的方式,我得到了“页面:状态:失败” – Zoomzoom