Phantomjs无法加载地址

时间:2015-04-20 18:20:47

标签: javascript ssl web-scraping phantomjs

感谢PhantomJS,我试图抓住这个网页:https://www.koshkamashkaeshop.com/fr/28-robes-Koshka-Mashka 但每次都无法加载。我认为这是因为https。 这是我的.sh代码:

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{

  }
 }
)})

4 个答案:

答案 0 :(得分:1)

Phantomjs connection to Facebook fails SSL handshake中描述的问题相同:Phantomjs默认为SSL 3.0,许多站点都禁用了SSL 3.0。你需要使用

 phantomjs  --ssl-protocol=any test.js

答案 1 :(得分:1)

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

另一个问题是PhantomJS版本< 1.9.8默认情况下使用SSLv3,但由于POODLE漏洞,大多数Web服务器已禁用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();
});

答案 2 :(得分:1)

我知道这很旧,但是我遇到了同样的错误

phantomjs --debug=yes --ignore-ssl-errors=true --ssl-protocol=any --web-security=true rasterize.js url output.pdf

信用:https://github.com/ariya/phantomjs/issues/10178

答案 3 :(得分:0)

如果是https,请尝试运行

phantomjs --ssl-protocol=TLSv1.1 <filename.js> 

此外,将用户代理添加到代码中。

e.g。

 var page = require('webpage').create();
 page.settings.userAgent = 'SpecialAgent';

 page.open(url,function(status){}

这对我有用。 :)