Phantomjs - 通过js读取cookie

时间:2015-10-21 13:03:54

标签: javascript cookies phantomjs

好的,所以我试图用幻影js从给定的网页上读取cookie。基本上我在page.open()块中有以下脚本:

response.cookies = page.evaluate(function () {
    return document.cookie
});

现在这会按预期返回cookie,但是,只有那些服务器端丢弃了。我想能够读取通过javascript删除的cookie。所以我经历了幻影的API,因为这是我第一次使用它。

我认为在page.open()上,删除cookie的脚本尚未执行,因此不会返回任何cookie。

我尝试使用page.onLoadFinsihed()回调,但这并不能确保所有脚本都执行。

page.onLoadFinished = function(status){
    return procedure.execute(status);
};

procedure.execute = function (status) {

    if (status === 'success') {

        try {

            response.content = page.evaluate(function () {
                return document.getElementsByTagName('html')[0].innerHTML
            });

            response.cookies = page.evaluate(function () {
                return document.cookie
            });

        } catch(e) {

            response.status  = 500;
            response.content = e.message;
        }
    }

    response.console = logs;

    system.stderr.write(debug.join('\n') + '\n');
    console.log(JSON.stringify(response, undefined, 4));

    phantom.exit();
};

我在调用document.cookie之前也尝试了setTimeout(),但仍然无法通过js删除任何cookie来显示。帮助赞赏。

这是一个简单,完整的例子:

  

read_cookies.js

var page       = require('webpage').create(),
    system     = require('system');

if (system.args.length === 1) {
    console.log('Usage: read_ccokies.js <some URL>');
    phantom.exit(1);
} else {
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            phantom.addCookie({
                'name': 'mycookie',
                'value': 'cookie value',
                'domain': 'domain.com'
            });

            console.log('Found cookies :' + page.evaluate(function () {
                return document.cookie;
            }));
        }
        phantom.exit();
    });
}

只需将此脚本保存在某处并调用它

即可
phantomjs --ignore-ssl-errors=true --ssl-protocol=any read_cookies.js <some URL>

1 个答案:

答案 0 :(得分:1)

在评估页面之前,只需一个简单的setTimeout()即可解决此问题。

window.setTimeout( function(){
   console.log('Found cookies :' + page.evaluate(function () {
        return document.cookie;
   }));
   phantom.exit();
},10000);