page.open()函数对某些URL不能正常工作[英] page.open() function doesn't work properly for some URLs

问题描述

我是节点新手.我已经使用 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,它会返回 unable to load,但如果是 google,它会给出正文响应.

谁能告诉我应该做些什么改变才能得到结果?

PhantomJS 版本:1.9.0

推荐答案

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

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

这可能是一个问题的原因是由于 Poodle 漏洞,许多网站已删除 SSLv3 支持.

这个答案提供了普通 PhantomJS 的解决方案.我的回答为 CasperJS 更详细地阐述了这个问题.

本文地址:https://www.itbaoku.cn/post/1740153.html