web-dev-qa-db-ja.com

異なるcasperjsプロセス間でCookieを永続化する方法

これは、あるcasperjsページから別のページにCookieを永続化する方法に関する質問です。

基本的に、特定のタスクを実行するためにcasperjsをワーカーとして生成するnodejsファイルを取得しました。1つはログインすることで、ログインしたらCookieをファイルに保存します。

私が次のキャスパーワーカーを生成するとき.. Cookieを使用して、再度ログインする必要はありません..これらの両方のメソッドが失敗しました

first:ワーカーcapserjsを起動するときに--cookies-file =。/ cookiefilename ie 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. startがCookieをページから削除するのは 前述 でしたか?もしそうなら、どうすればそれを防ぐことができますか?
  2. 私はセッションが同じphantomjsページオブジェクト(ここを参照 https://Gist.github.com/abbood/5347252 を参照)内に持続し、同じcasperjsページオブジェクト(こちらをご覧ください https://Gist.github.com/abbood/5347287
  3. 私はcookieをそのままファイルに保存する(つまり、json/cookieをまったく解析しない)ことを覚えておいてください。したがって、私のcookieファイルは次のようになります。

[一般] cookies = "@ Variant(\ 0\0\0\x7f\0\0\0\x16QList\0\0\0\0\x1\0\0\0\n\0\0\0YCNTR = LB; expires = 2013年4月09日4月17日12:05 GMT; domain = .recruiter.domain.com; path =/\ 0\0\0qUID = 13eb22f-2.21.171.120-1365523938; expires =月、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;満了し=木、09-月2013年午後04時16分06秒GMT;ドメイン= .recruiter.domain.com;パス=/\ 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 = C8ctADE3OC4xMzUuMTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2000AAJZAAAAAAAAAAAAAAAAAAAAAAAAAき各四ウエーク:lv = 1365495369854:ss = ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; expires = Thu、09-Apr-2015 16:16:10 GMT; domain = statse.domain.com; path =/\ 0\0\0Yv1st = CE061E87215F2D73; ex pires =水曜日、2020年2月19日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 + ZFHNPmKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA expires = Fri、07-Apr-2023 16:16:13 GMT; domain = cookie.domain.com;パス= /)」

28
abbood

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

65
imos

@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ファイルがある場合に役立ちます。

10
Ryguy