如何在不同的casperjs进程之间保留cookie

时间:2013-04-09 16:48:47

标签: node.js session cookies phantomjs casperjs

这是一个关于如何将cookie从一个casperjs页面持久保存到另一个页面的问题。

所以基本上我得到一个nodejs文件,它生成casperjs作为工作人员来完成某些任务..一个是登录,一旦登录我将cookie存储在一个文件中。

当我产生下一个casper worker时..我希望它使用cookie而不必再次登录..这两种方法都失败

第一次:当我产生工人capserjs时,我添加了--cookies-file =。/ cookiefilename ie var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

casperjs工作文件中的

第二个: ..我让它读取并从文件中设置cookie,即

var casper = require('casper').create();
var cookieFileName = 'monsterCookie.txt';

// grab cookies from file 
var fs = require('fs');
var utils = require('utils');
var cookies = fs.read(cookieFileName);

casper.page.setCookies(cookies); 

casper.start('domain/page.html', function() {
    //FAIL! cookies aren't used here
    this.debugHTML();
});

casper.run();

说明:

  1. start之前{{1}}从页面中删除了Cookie?如果是的话,我该如何预防呢?
  2. 我知道会话在同一个phantomjs页面对象中持续存在(请参阅此处mentioned),同样在同一个casperjs页面对象中发生(请参阅此处https://gist.github.com/abbood/5347252
  3. 请记住,我将cookie存储在文件中(即根本没有任何json / cookie解析)..所以我的cookie文件看起来就像这样
  4.   

    [通用]   饼干=“@变体(\ 0 \ 0 \ 0 \ 0x7F部分\ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ 0 \ X1 \ 0 \ 0 \ 0 \ n \ 0 \ 0 \ 0YCNTR = LB;   expires = Tue,09-Apr-2013 17:12:05 GMT;域= .recruiter.domain.com;   路径= / \ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938;期满=星期一,   格林威治标准时间30-Mar-2015 16:12:18;域= .domain.com;   路径= / \ 0 \ 0 \ 0] UIDR = 1365523938;到期=周一,2015年3月30日16:12:18 GMT;   域= .domain.com;路径= / \ 0 \ 0 \ 0 [R_LANG = EN;到期= 2013年5月9日星期四   格林尼治标准时间16:16:06;域= .recruiter.domain.com;   路径= / \ 0 \ 0 \ 0 \ X94 \ X43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0;   到期= 2013年5月9日星期四16:16:06 GMT;   域= .recruiter.domain.com;   路径= / \ 0 \ 0 \ 0 \ x94WT_FPC = ID = 20cf093f17f2c6f3d041365495136954:LV = 1365495369854:SS = 1365495136954;   expires =周五,07-Apr-2023 08:16:09 GMT;域= .domain.com;   路径= / \ 0 \ 0 \ 0 \ XC4 \ X41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo + ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-;   expires =星期四,09-Apr-2015 16:16:10 GMT;域= statse.domain.com;   路径= / \ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; expires = Wed,19-Feb-2020 14:28:00   格林威治标准时间;域= .domain.com;   路径= / \ 0 \ 0 \ 0 \ X84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261;   到期=周五,07年4月7日至2023年16:16:11 GMT;域= cookie.domain.com;   路径= / DCS000065_7K5I \ 0 \ 0 \ 0 \ XBE \ X41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0 + ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-;   到期=周五,07年4月7日 - 2023年16:16:13 GMT;域= cookie.domain.com;   路径= /)“

2 个答案:

答案 0 :(得分:65)

保存Cookie:

var fs = require('fs');
var cookies = JSON.stringify(phantom.cookies);
fs.write(cookieFilename, cookies, 644);

恢复Cookie

var fs = require('fs');
var data = fs.read(cookieFilename);
phantom.cookies = JSON.parse(data);

phantom是PhantomJS中的全局变量。您可以在wiki

中获得更多信息

答案 1 :(得分:10)

@imos很棒的答案!它只是帮助了我,我希望我能再添加一些。

您还可以使用以下方法向页面添加单个Cookie:

var fs = require('fs')
var data = fs.read(file)
var cookies = JSON.parse(data)

for(var i = 0; i < cookies.length; i++) {
    phantom.addCookie(cookies[i]);
}

如果有多个cookie文件,这可能会有所帮助。