2013-04-09 3 views
27

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

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

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

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

второй:. в файле casperjs рабочий .. Я делаю это прочитать и установить куки из файла т.е.

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

[Общие] печенье = "@ Variant (\ 0 \ 0 \ 0 \ x7f \ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ 0 \ x1 \ 0 \ 0 \ 0 \ n \ 0 \ 0 \ 0YCNTR = LB; expires = Tue, 09-Apr-2013 17:12:05 GMT; domain = .recruiter.domain.com; path =/\ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; expires = Mon, 30-Mar-2015 16:12:18 GMT; домен = .domain.com; path =/\ 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; path =/\ 0 \ 0 \ 0 \ x94 \ x43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0; expires = Thu, 09-May-2013 16:16:06 GMT; домен = .recruiter.domain.com; path =/\ 0 \ 0 \ 0 \ x94WT_FPC = id = 20cf093f17f2c6f3d041365495136954: lv = 1365495369854: ss = 1365495136954; expires = Пт, 07-апр-2023 08:16:09 GMT; домен = .domain.com; path =/\ 0 \ 0 \ 0 \ xc4 \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo + ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; expires = Thu, 09-Apr-2015 16:16:10 GMT; домен = statse.domain.com; path =/\ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; expires = Wed, 19-Feb-2020 14:28:00 GMT; домен = .domain.com; path =/\ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; expires = Пт, 07-апр-2023 16:16:11 GMT; домен = cookie.domain.com; path =/DCS000065_7K5I \ 0 \ 0 \ 0 \ xbe \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0 + ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; expires = Пт, 07-апр-2023 16:16:13 GMT; домен = cookie.domain.ком; путь = /)»

+0

Звучит так, _might_ будет ошибкой. Если вы еще этого не сделали, можете опубликовать на странице [Группы пользователей Касперского] (https://groups.google.com/forum/#!forum/casperjs). – thealexbaron

+0

Также вы уверены, что файлы cookie успешно читаются и анализируются? – thealexbaron

+0

@thealexbaron Я сделал [принести] (https://github.com/n1k0/casperjs/issues/175) вопрос с Нико, основателем Каспера, все еще ждущим ответа ... но это хороший момент, который вы сделали о том, чтобы убедиться, что cookie успешно прочитан и проанализирован. Я не совсем уверен (с моей головы), как это сделать .. lemme знаю, если у вас есть предложения .. но я углубится в то, что – abbood

ответ

61

Сохранение куки:

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); 

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

+0

ugh, почему F не работает, передавая проклятый флаг. СПАСИБО за это решение. –

+2

Войдите, если пример куки на переполнении стека: https://github.com/cirosantilli/stack-overflow-vote-fraud-script/blob/1477d09ae365c2997ded514539898efd55171091/vote.js Примечания: 1) 'phantom' доступен по умолчанию от CasperJS, нет необходимости требовать его. 2) 'fs' также входит в состав PhantomJS: http://phantomjs.org/api/fs/method/is-file.html Неизменяемый материал перед узлом: http://stackoverflow.com/questions/15745394/can -phantomjs-work-with-node-js –

+0

спасибо, очень полезно – waza123

10

@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]); 
} 

Это может помочь, если есть несколько файлов куки.

Смежные вопросы