这是一个关于如何将cookie从一个casperjs页面持久保存到另一个页面的问题。
所以基本上我得到一个nodejs文件,它生成casperjs作为工作人员来完成某些任务..一个是登录,一旦登录我将cookie存储在一个文件中。
当我产生下一个casper worker时..我希望它使用cookie而不必再次登录..这两种方法都失败:
第一次:当我产生工人capserjs时,我添加了--cookies-file =。/ cookiefilename ie
var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);
第二个: ..我让它读取并从文件中设置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();
说明:
start
之前{{1}}从页面中删除了Cookie?如果是的话,我该如何预防呢?[通用] 饼干=“@变体(\ 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; 路径= /)“
答案 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文件,这可能会有所帮助。