【问题标题】:Can phantomjs read cookies set via javascript?phantomjs 可以读取通过 javascript 设置的 cookie 吗?
【发布时间】:2015-11-05 18:57:35
【问题描述】:

我正在尝试使用 phantomjs 来自动化登录 facebook 的过程。问题是 facebook 在提交登录表单之前使用 js 代码设置 cookie。单击电子邮件输入框,登录表单可以触发设置 cookie 的 facebook js 代码,因此我创建了一个脚本以在登录前单击电子邮件框,但仍然出现“您的浏览器未启用 Cookie。请在您的浏览器首选项中启用 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?还是我做错了什么?

【问题讨论】:

  • 目前尚不清楚您要做什么。您在“自动登录 Facebook 的过程”下是什么意思?使用 --cookies-file 命令参数,您可以存储 cookie(从而保存和重用 facebook 会话)。为什么要手动重新创建 cookie?
  • 你做错了什么,试图“自动化”Facebook不希望你自动化的东西。
  • "使用 --cookies-file 命令参数,您可以存储 cookie(从而保存和重复使用 facebook 会话)。" - 我试过了,问题是它不起作用。我刚刚收到“您的浏览器未启用 Cookie。请在您的浏览器首选项中启用 Cookie 以继续。”页面加载后的消息。我上面发布的脚本不是完整版,我对其进行了修改,所以你们可以看到 phantomjs 没有存储由 javascript 设置的 cookie。我只是想知道读取js设置的cookie是否是phantomjs无法做到的,或者是我的问题。
  • 奇怪的是,您总是收到“Cookies are not enabled”消息。也许在您的系统上存储 cookie 确实存在问题。您可以使用此设置登录到任何其他网站吗?
  • 是的,我可以轻松登录到其他网站,甚至是 youtube。一定是因为 facebook 使用 javascript 来存储 cookie,这是我注意到 facebook 和我尝试过的其他网站之间的唯一区别。

标签: javascript facebook cookies phantomjs


【解决方案1】:

只需更改您的用户代理

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 2011-03-06
    • 2012-07-21
    • 1970-01-01
    • 2012-09-10
    • 2013-03-02
    • 2011-01-10
    相关资源
    最近更新 更多