怎么获取cookie
先从phantomjs说起
phantomjs的处理:
phantomjs支持命令行选项用于存储cookie:
--cookies-file=/path/to/cookies.txt
get-cookie
phantomjs中的webpage对象有cookies属性可以获取到对应的cookie
var webPage = require('webpage');
var page = webPage.create();
page.open('http://phantomjs.org', function (status) {
var cookies = page.cookies;
console.log('Listing cookies:');
for(var i in cookies) {
console.log(cookies[i].name + '=' + cookies[i].value);
}
phantom.exit();
});
set-cookie
phantomjs 有专门的接口用来添加cookie,就是addCookie:
var webPage = require('webpage');
var page = webPage.create();
phantom.addCookie({
'name' : 'Valid-Cookie-Name', /* required property */
'value' : 'Valid-Cookie-Value', /* required property */
'path' : '/foo', /* required property */
});
当然还可以设置一个cookie其他的属性,具体参见官网。
下面来看一看casperjs的做法:
casperjs
运行casperjs时加上命令行参数:
--cookies-file=./cookies
在casperjs下设置或者获取cookie,从网上的代码看,好像有两条思路:
首先是使用phantom对象,可以通过phantom.addCookie添加cookie,然后通过phantom.cookies来读取。如下两个例子:
设置cookie
一个比较常见的设置cookie的办法:
var cookie
...
if (cookie) {
cookie.split(";").forEach(function(pair){
pair = pair.split("=");
phantom.addCookie({
'name': pair[0],
'value': pair[1],
'domain': getDomain(initUrl),
});
});
}
get-cookie
casper.then(function() {
var cookies = phantom.cookies;
this.echo("cookie.length = " + cookies.length);
for (var i in cookies) {
this.echo(cookies[i].name + "=" + cookies[i].value);
}
});
保存cookie到文件
尽管另外保存好像没什么必要,在开启–cookies-file参数后能自动保存:
用这个方法保存的时候,每个cookie的信息是很完整的,每个cookie都包括如下属性:domain,expires,expiry,httponly,name,path,secure,value 这七个属性。和在–cookie-file参数设置的文件内容不一样。
var fs = require('fs')
var cookies = JSON.stringify(phantom.cookies)
fs.write("cookie.txt", cookies, 644)
从文件中读取cookie
var fs = require('fs')
var data = fs.read("cookie.txt")
phantom.cookies = JSON.parse(data)
使用casperjs对象获取cookie:
casper.then(function() {
var cookies = this.page.cookies;
this.echo("cookie.length = " + cookies.length);
for (var i in cookies) {
this.echo(cookies[i].name + "=" + cookies[i].value);
}
});