Подтвердить что ты не робот

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

Это вопрос о том, как перенести файлы cookie с одной страницы casperjs на другой.

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

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

во-первых:, когда я создаю рабочий файл caperjs. Я добавляю файл -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();

Примечания:

  • ранее упоминал, что start удаляет файлы cookie со страницы? если да, как это предотвратить?
  • Я знаю, что сеансы сохраняются в одном и том же объекте страницы phantomjs (см. здесь https://gist.github.com/abbood/5347252), и это происходит в одном и том же объекте страницы casperjs (см. здесь <а2 > )
  • Имейте в виду, что я храню файлы cookie как есть в файле (т.е. без какого-либо разбора json/cookie вообще).. так что файл cookie выглядит точно так же

[General] печенье = "@Variant (\ 0\0\0\x7f\0\0\0\x16QList\0\0\0\0\x1\0\0\0\п\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 марта 2015 года 16:12:18 GMT; домен =.domain.com; Путь =/\ 0\0\0] UIDR = 1365523938; expires = Пн, 30-Мар-2015 16:12:18 GMT; домен =.domain.com; Путь =/\ 0\0\0 [R_LANG = ен; expires = Thu, 09-May-2013 16:16:06 GMT; домен =.recruiter.domain.com; Путь =/\ 0\0\0\x94\x43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0; expires = Thu, 09-May-2013 16:16:06 GMT; домен =.recruiter.domain.com; Путь =/\ 0\0\0\x94WT_FPC = Id = 20cf093f17f2c6f3d041365495136954: LV = 1365495369854: сс = 1365495136954; expires = Пт, 07-апр-2023 08:16:09 GMT; домен =.domain.com; Путь =/\ 0\0\0\XC4\x41\x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo + ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; expires = Thu, 09-Apr-2015 16:16:10 GMT; домен = statse.domain.com; Путь =/\ 0\0\0Yv1st = CE061E87215F2D73; expires = ср., 19-фев-2020 14:28:00 ВРЕМЯ ПО ГРИНВИЧУ; домен =.domain.com; Путь =/\ 0\0\0\x84\x43OOKIE_ID = 178.135.147.39-2368749744.30291261; expires = Пт, 07-апр-2023 16:16:11 GMT; домен = cookie.domain.com; Путь =/DCS000065_7K5I\0\0\0\XBE\x41\x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0 + ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; expires = Пт, 07-апр-2023 16:16:13 GMT; домен = cookie.domain.com; Путь =/)"

4b9b3361

Ответ 1

Сохранение файлов 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. Более подробную информацию вы можете получить в вики

Ответ 2

@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.