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