感谢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{
}
}
)})
答案 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
答案 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){}
这对我有用。 :)