node.js - 如何在不同的 casperjs 进程之间持久化 cookie

标签 node.js session cookies phantomjs casperjs

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

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

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

first: 当我生成 worker capserjs 时,我添加了 --cookies-file=./cookiefilename 即 var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

second: 在 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. 它是 mentioned之前 start 从页面中删除 cookie?如果是这样,我该如何防止?
  2. 我知道 session 在同一个 phantomjs 页面对象中持续存在(参见此处 https://gist.github.com/abbood/5347252),并且同样发生在同一个 casperjs 页面对象中(参见此处 https://gist.github.com/abbood/5347287)
  3. 请记住,我将 cookie 按原样存储在文件中(即根本没有任何 json/cookie 解析).. 所以我的 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=Tue, 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; expires=Wed, 19-Feb-2020 14:28:00 GMT; domain=.domain.com; path=/\0\0\0\x84\x43OOKIE_ID=178.135.147.39-2368749744.30291261; expires=Fri, 07-Apr-2023 16:16:11 GMT; domain=cookie.domain.com; path=/DCS000065_7K5I\0\0\0\xbe\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0+ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; expires=Fri, 07-Apr-2023 16:16:13 GMT; domain=cookie.domain.com; path=/)"

最佳答案

保存 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

关于node.js - 如何在不同的 casperjs 进程之间持久化 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907800/

相关文章:

node.js - 如何获取对象id以及如何更新

javascript - Nginx 和 Node.js 服务器 - 多个任务

ruby ::Mechanize::cookie_jar

angularjs - 带有 AngularJS 和 Express 的错误 CSRF token

node.js - 无法将调试器附加到端口 3000 上已运行的 Nodejs Web 应用程序

node.js - 使用 OAuth 通过 REST API 从 Magento 到 NodeJS

php - 如果字符串以 "xx"开头 (PHP)

c# - session 在 Controller 方法中变为空

java - 为什么使用 cookie 而不是记录每笔交易

javascript - Ember.js - 设置启用仅 HTTP cookie?