我正在尝试,感谢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{
}
}
)})
我知道这是旧的,但我得到了同样的错误
phantomjs --debug=yes --ignore-ssl-errors=true --ssl-protocol=any --web-security=true rasterize.js url output.pdf
这与Phantomjs connection to Facebook fails SSL handshake描述的问题相同:Phantomjs默认为SSL 3.0,许多站点都禁用了SSL 3.0。你需要使用
phantomjs --ssl-protocol=any test.js
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();
});
如果是https,请尝试运行
phantomjs --ssl-protocol=TLSv1.1 <filename.js>
此外,将用户代理添加到代码中。
EG
var page = require('webpage').create();
page.settings.userAgent = 'SpecialAgent';
page.open(url,function(status){}
这对我有用。 :)