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

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

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

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

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

второй: в рабочем файле 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 выглядит именно так

[Общие] куки = "@ Вариант (\ 0 \ 0 \ 0 \ x7f \ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ 0 \ x1 \ 0 \ 0 \ 0 \ n \ 0 \ 0 \ 0YCNTR = LB; истекает = Вт, 9 апреля 2013 г. 17:12:05 GMT; домен = .recruiter.domain.com; путь = / \ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; истекает = Пн, 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; путь = / \ 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; =f .recruc07_domain.com; : lv = 1365495369854: ss = 1365495136954; истекает = пт, 07-апр-2023, 08:16:09 по Гринвичу; домен = .domain.com; путь = / \ 0 \ 0 \ 0 \ xc4 \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5xAjAjAjAjAjAjMzAjAjMzAjAjAjMzAjAjMZUuMTQ3LjM5LTI 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.com; путь = / \ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; истекает = пт, 07-апр-2023 16:16:11 GMT; домен = cookie.domain.com; путь = / DCS000065_7K5I \ 0 \ 0 \ 0 \ xbe \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQAAAAM0 + ZFAQANAmAm- истекает = пт, 07-апр-2023 16:16:13 GMT; домен = cookie.domain.com; путь = /) "


person abbood    schedule 09.04.2013    source источник
comment
Похоже, это может быть ошибкой. Возможно, стоит опубликовать сообщение на странице групп Google CasperJS, если вы еще этого не сделали .   -  person thealexbaron    schedule 10.04.2013
comment
Кроме того, уверены ли вы, что файлы cookie успешно читаются и анализируются?   -  person thealexbaron    schedule 10.04.2013
comment
@thealexbaron Я поднял вопрос с Нико, основателем Casper, который все еще ждет за его ответ .. но это хорошая мысль, которую вы отметили о том, чтобы убедиться, что файл cookie успешно прочитан и проанализирован ... я не совсем уверен (в верхней части головы), как это сделать ... дайте мне знать, есть ли у вас предложения .. но я углублюсь в это   -  person abbood    schedule 10.04.2013
comment
поговорил с создателем casperjs .. попросил меня открыть новый выпуск .. проблема создана здесь   -  person abbood    schedule 10.04.2013
comment
Просто сделайте console.log (cookies) после var cookies = fs.read (cookieFileName); - покажите нам результат.   -  person thealexbaron    schedule 10.04.2013


Ответы (2)


Сохранение файлов 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

person imos    schedule 06.06.2013
comment
тьфу, почему F не работает, передав этот чертов флаг. СПАСИБО за это решение. - person Sean Clark; 04.12.2015
comment
Пример входа в систему, если файлы cookie в Stack Overflow: github. com / cirosantilli / stack-overflow-vote-fraud-script / blob / Примечания: 1) phantom доступен по умолчанию из CasperJS, не нужно его требовать. 2) fs также является частью PhantomJS: phantomjs.org/api/fs/ method / is-file.html Неизменяемый материал перед узлом: stackoverflow.com/questions/15745394/ - person Ciro Santilli 新疆再教育营六四事件ۍ 25.12.2015

@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 несколько.

person Ryguy    schedule 17.07.2013