page.open()函数对某些URL无法正常工作

时间:2015-01-29 23:16:58

标签: javascript node.js facebook phantomjs

我是节点新手。我已经使用Node和Phantom编写了一个代码来搜索网站。我的代码适用于google.com但不适用于facebook,因为它在内部向其他文件发出ajax请求以获取数据。

var phantom = require('phantom');

phantom.create(function(ph) {
   return ph.createPage(function(page) {
       return page.open("https://facebook.com/", function(status) {
            if(status !== 'success'){
                console.log('Unable to load the url!');
                ph.exit();
            } else {
                setTimeout(function() {
                    return page.evaluate(function() {
                        return document.getElementsByTagName('body')[0].innerHTML;

                     }, function(result) {
                         console.log(result); //Log out the data.
                         ph.exit();
                     });
                }, 5000);
            };
        });
    });
});

所以基本上当我执行我的代码然后在facebook的情况下它返回无法加载但是在谷歌的情况下它正在给出身体响应。

有人可以告诉我应该做些什么改变来获得结果吗?

PhantomJS版本:1.9.0

1 个答案:

答案 0 :(得分:2)

您应该将一些命令行选项传递给PhantomJS,以便不使用SSLv3,但只使用TLSv1并可选择忽略SSL错误(--web-security=false也可能有帮助):

phantom.create('--ssl-protocol=tlsv1', '--ignore-ssl-errors=true', function(ph) {
    ...

这可能是一个问题的原因是许多网站因Poodle漏洞而删除了SSLv3支持。

This answer为简单的PhantomJS提供了解决方案。 My answer here详细阐述了CasperJS的问题。