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

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

所以基本上我有一个nodejs文件,产生casperjs作为一个工人来做某些任务..一个是login,一旦login,我将cookie存储在一个文件中。

当我产卵下一个casper工人..我希望它使用cookie,而不必再次login..这两个方法失败

第一:当我产卵的工人capserjs我添加–cookies文件=。/ cookiefilename即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从页面中删除cookies? 如果是的话,我该如何防止呢?
  2. 我知道会话在相同的phantomjs页面对象(参见https://gist.github.com/abbood/5347252 )中保持不变,在同一个casperjs页面对象中也是如此(请参阅https://gist.github.com/ abbood / 5347287 )
  3. 请记住,我存储cookie文件(即没有任何json / cookieparsing)..所以我的cookie文件看起来就像这样

[General] cookies =“@ Variant(\ 0 \ 0 \ 0 \ x7f \ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ 0 \ x1 \ 0 \ 0 \ 0 \ n \ 0 \ 0 \ 0YCNTR = LB; expires =星期二,09-Apr-2013 17:12:05 GMT; domain = .recruiter.domain.com; path = / \ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; expires = Mon,30 -Mar-2015 16:12:18 GMT; domain = .domain.com; path = / \ 0 \ 0 \ 0] UIDR = 1365523938; expires = Mon,30-Mar-2015 16:12:18 GMT; domain = .domain.com; path = / \ 0 \ 0 \ 0 [R_LANG = en; expires = Thu,09-May-2013 16:16:06 GMT; domain = .recruiter.domain.com; path = / \ 0 \ 0 \ 0 \ x94 \ x43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0; expires = Thu,09-May-2013 16:16:06 GMT; domain = .recruiter.domain.com; path = / \ 0 \ 0 \ 0 \ x94WT_FPC = id = 20cf093f17f2c6f3d041365495136954 :lv = 1365495369854:ss = 1365495136954; expires = Fri,07-Apr-2023 08:16:09 GMT; domain = .domain.com; path = / \ 0 \ 0 \ 0 \ xc4 \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo + ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; expires = Thu,09-Apr-2015 16:16:10 GMT; domain = statse.domain.com; path = / \ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; ex pires = Wed,19-Feb-2020 14:28 GMT; 域= .domain.com; path= / \ 0 \ 0 \ 0 \ X84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; 到期= Fri,20-Apr-2023 16:16:11 GMT; 域= cookie.domain.com; path= / DCS000065_7K5I \ 0 \ 0 \ 0 \ XBE \ X41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0 + ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; 到期= Fri,20-Apr-2023 16:16:13 GMT; 域= cookie.domain.com; path= /)”

储存cookies:

 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); 

PhantomJS中的phantom是全局variables。 你可以在wiki中获得更多信息

@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文件,这可能会有所帮助。