phantomjs能读取通过javascript设置的cookie吗?

时间:2015-11-05 18:57:35

标签: javascript facebook cookies phantomjs

我正在尝试使用phantomjs来自动登录到facebook。问题是facebook在提交登录表单之前使用js代码设置cookie。单击电子邮件输入框,登录表单可以触发设置cookie的facebook js代码,因此我在登录前创建了一个单击电子邮箱的脚本,但仍然显示“浏览器未启用Cookies。请在您的浏览器首选项中启用Cookie以继续。“信息。这是我的代码:

var page = require('webpage').create();
var data = {};
var fs = require('fs');
var CookieJar = 'cookie.json';
page.customHeaders = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'
};
if (fs.isFile(CookieJar)) {
    Array.prototype.forEach.call(JSON.parse(fs.read(CookieJar)), function(x) {
        phantom.addCookie(x);
    });
}
page.open('https://www.facebook.com/login.php', function(status) {
    setTimeout(function() {
        pageloaded();
        setTimeout(function() {
            afterclick();
        }, 3000);
    }, 3000);

    function pageloaded() {
        pagex = page.evaluate(function() {
            function mouseclick(element) {
                var event = document.createEvent(
                    'MouseEvents');
                event.initMouseEvent('click', true,
                    true, window, 1, 0, 0);
                element.dispatchEvent(event);
            }
            var element = document.querySelector('#email');
            mouseclick(element);
        });
    }

    function afterclick() {
        data.content = page.content;
        fs.write(CookieJar, JSON.stringify(phantom.cookies), 'w');
        console.log(page.content);
        phantom.exit();
    }
});

此代码基本上转到facebook登录页面,然后点击电子邮件输入框。最终结果应该是cookie.json文件包含facebook设置的cookie,但我没有得到任何cookie。我也试过使用--cookies-file命令行,在我看来,phantomjs只能存储服务器端设置的cookie吗?或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

只需更改您的用户代理

即可
page.settings.userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko/20100101 Firefox/44.0"