Phantomjs无法加载地址

问题描述 投票:0回答:4

我正在尝试,感谢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{

  }
 }
)})
javascript ssl web-scraping phantomjs
4个回答
2
投票

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

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


1
投票

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

 phantomjs  --ssl-protocol=any test.js

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();
});

0
投票

如果是https,请尝试运行

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

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

EG

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

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

这对我有用。 :)

© www.soinside.com 2019 - 2024. All rights reserved.