28

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

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

次のキャスパーワーカーを生成するとき..再度ログインするのではなく、Cookieを使用したい..これらの方法は両方とも失敗しました:

最初:ワーカー capserjs を生成するときに、 --cookies-file=./cookiefilename ie を追加します var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

2番目: 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. ページから Cookieを削除することは以前に言及されましたか? startもしそうなら、どうすればそれを防ぐことができますか?
  2. セッションが同じ phantomjs ページ オブジェクト内で持続し (こちらを参照https://gist.github.com/abbood/5347252 )、同じ casperjs ページ オブジェクト内で同じことが発生することを知っています (こちらを参照https://gist.github.com/ abbood/5347287 )
  3. クッキーをファイルにそのまま保存することに注意してください(つまり、json / cookieの解析はまったく行わないでください)..したがって、クッキーファイルは次のようになります

path=/\0\0\0\xc4\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo+ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAAA-; expires=2015 年 4 月 9 日木曜日 16:16:10 GMT; ドメイン=statse.domain.com; path=/\0\0\0Yv1st=CE061E87215F2D73; expires=2020 年 2 月 19 日水曜日 14:28:00 GMT; ドメイン=.domain.com; path=/\0\0\0\x84\x43OOKIE_ID=178.135.147.39-2368749744.30291261; expires=2023 年 4 月 7 日金曜日 16:16:11 GMT; ドメイン=cookie.domain.com; path=/DCS000065_7K5I\0\0\0\xbe\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0+ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAAA-; expires=2023 年 4 月 7 日金曜日 16:16:13 GMT; ドメイン=cookie.domain.com; パス=/)」expires=2020 年 2 月 19 日水曜日 14:28:00 GMT; ドメイン=.domain.com; path=/\0\0\0\x84\x43OOKIE_ID=178.135.147.39-2368749744.30291261; expires=2023 年 4 月 7 日金曜日 16:16:11 GMT; ドメイン=cookie.domain.com; path=/DCS000065_7K5I\0\0\0\xbe\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0+ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAAA-; expires=2023 年 4 月 7 日金曜日 16:16:13 GMT; ドメイン=cookie.domain.com; パス=/)」expires=2020 年 2 月 19 日水曜日 14:28:00 GMT; ドメイン=.domain.com; path=/\0\0\0\x84\x43OOKIE_ID=178.135.147.39-2368749744.30291261; expires=2023 年 4 月 7 日金曜日 16:16:11 GMT; ドメイン=cookie.domain.com; path=/DCS000065_7K5I\0\0\0\xbe\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0+ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAAA-; expires=2023 年 4 月 7 日金曜日 16:16:13 GMT; ドメイン=cookie.domain.com; パス=/)」

4

2 に答える 2

66

Cookie の保存:

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

クッキーの復元:

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

phantomPhantomJSのis グローバル変数です。wikiで入手できる詳細情報

于 2013-06-06T05:20:19.233 に答える
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 ファイルがある場合に役立ちます。

于 2013-07-17T23:07:54.887 に答える