как сохранить куки между различными casperjs процессов

это вопрос о том, как сохранить куки с одной страницы casperjs на другую..

Итак, в основном я получил файл nodejs, который порождает casperjs как работника для выполнения определенных задач.. один из них-войти в систему, после входа в систему я храню файл cookie в файле.

когда я порождаю следующего работника Каспера.. я хочу, чтобы он использовал cookie, а не снова входил в систему.. оба эти метода ошибка:

первый: когда я порождаю рабочий capserjs Я добавляю --cookies-file=./cookiefilename т. е. var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

второй: в рабочем файле casperjs.. Я заставляю его читать и устанавливать cookie из файла ie

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 удаляет куки со страницы? если да, то как мне это предотвратить?
  2. я знаю, что сеансы сохраняются в том же объекте страницы phantomjs (см. здесь https://gist.github.com/abbood/5347252) и то же самое происходит в том же объекте страницы casperjs (см. здесь https://gist.github.com/abbood/5347287)
  3. имейте в виду, что я храню куки, как в файле (т. е. без какого-либо анализа JSON/cookie вообще).. таким образом, мой файл cookie выглядит именно так

[общие] cookies= " @Variant(x7fx16QList 0 x1 nYCNTR=LB; истекает=Вт, 09-апр-2013 17: 12: 05 GMT; domain=.recruiter.domain.com; path= / qUID=13eb22f-2.21.171.120-1365523938; истекает=Пн, 30-мар-2015 16:12:18 мск; domain=.domain.com; путь= / ]UIDR=1365523938; истекает=Пн, 30-мар-2015 16:12: 18 GMT; domain=.domain.com; path= / [R_LANG=en; истекает=чт, 09-мая-2013 16: 16: 06 GMT; domain=.recruiter.domain.com; путь= / x94x43=4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1e6quylhe3e4f3eaghbrjucndgrvdehh0; истекает=чт, 09-май-2013 16:16: 06 GMT; domain=.recruiter.domain.com; путь= / x94WT_FPC=id=20cf093f17f2c6f3d041365495136954:lv=1365495369854:ss=1365495136954; истекает=Пт, 07-апр-2023 08:16: 09 GMT; domain=.domain.com; path=/xc4x41x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5nzq0ljmwmjkxmjyxaaaaaaaaaaabaaaamyobamo+ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAaaa-; истекает=чт, 09-апр-2015 16:16: 10 GMT; domain=statse.domain.com; path= / Yv1st=CE061E87215F2D73; истекает=ср, 19-фев-2020 14:28: 00 По Гринвичу; domain=.domain.com; путь= / x84x43OOKIE_ID=178.135.147.39-2368749744.30291261; истекает=Пт, 07-апр-2023 16:16: 11 GMT; domain=cookie.domain.com; path=/DCS000065_7K5Ixbex41x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3ndk3ndqumzayoteynjeaaaaaaaabaaaaqqaaam0+ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAaaa-; истекает=Пт, 07-апр-2023 16:16: 13 GMT; domain=cookie.domain.com; path=/)"

2 ответов


сохранение cookies:

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

восстановление cookies:

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

на phantom является глобальной переменной в PhantomJS. Более подробную информацию вы можете получить в wiki


@imos отличный ответ! Это просто помогло мне, и я надеялся, что смогу добавить еще.

вы также можете добавить отдельные куки на страницу, используя:

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.