好的,所以我试图用幻影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>
答案 0 :(得分:1)
在评估页面之前,只需一个简单的setTimeout()即可解决此问题。
window.setTimeout( function(){
console.log('Found cookies :' + page.evaluate(function () {
return document.cookie;
}));
phantom.exit();
},10000);