cómo conservar cookies entre diferentes procesos de casperjs


Esta es una pregunta sobre cómo persistir las cookies de una página de casperjs a otra..

Así que básicamente tengo un archivo nodejs que genera casperjs como un trabajador para hacer ciertas tareas.. una es iniciar sesión, una vez que haya iniciado sesión, almaceno la cookie en un archivo.

Cuando aparezca el próximo trabajador casper.. quiero que utilice la cookie en lugar de tener que iniciar sesión de nuevo.. ambos métodos fallaron :

Primero: cuando aparezco el trabajador capserjs agrego el -- cookies-file=./ cookiefilename ie var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

Segundo: dentro del fichero de trabajo de casperjs.. Lo hago leer y establecer la cookie desde un archivo 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();

notas:

  1. fue mencionado antes que start elimina las cookies de la página? si es así ¿cómo puedo evitar eso?
  2. Sé que las sesiones persisten dentro del mismo objeto de página phantomjs (ver aquí https://gist.github.com/abbood/5347252 ) y lo mismo sucede dentro de lo mismo objeto de página casperjs (ver aquí https://gist.github.com/abbood/5347287 )
  3. tenga en cuenta que almaceno las cookies tal como están en el archivo (es decir, sin ningún análisis de json/cookie).. así que mi archivo cookie se ve exactamente como esto

[Generalidades] las cookies="@Variante(\0\0\0\x7f\0\0\0\x16QList\0\0\0\0\1\0\0\0\n\0\0\0YCNTR=LB; expira = Mar, 09-Abr-2013 17: 12: 05 GMT; domain=.recruiter.domain.com; path = / \0\0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; expira=Mon, 30-Mar-2015 16: 12: 18 GMT; domain=.domain.com; path = / \0\0\0] UIDR = 1365523938; expira = Lun, 30-Mar-2015 16: 12: 18 GMT; domain=.domain.com; path = / \0\0\0[R_LANG = es; expires = Thu, 09-May-2013 16: 16: 06 GMT; domain=.recruiter.domain.com; path=/\0\0\0\x94\x43=4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1e6quylhe3e4f3eaghbrjucndgrvdehh0; expira = Jue, 09-May-2013 16: 16: 06 GMT; domain=.recruiter.domain.com; path = / \0\0\0\x94WT_FPC = id = 20cf093f17f2c6f3d041365495136954: lv = 1365495369854: ss=1365495136954; expira = Vie, 07-Abr-2023 08: 16: 09 GMT; domain=.domain.com; path=/\0\0\0\xc4\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo+ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; expira = Jue, 09-Abr-2015 16: 16: 10 GMT; domain=statse.domain.com; path = / \0\0\0Yv1st = CE061E87215F2D73; expira = Mié, 19-Feb-2020 14:28: 00 GMT; domain=.domain.com; path = / \0\0 \ 0 \ x84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; caduca = Vie, 07-Abr-2023 16: 16: 11 GMT; domain=cookie.domain.com; path=/DCS000065_7K5I\0\0\0\xbe\x41\x43OOKIE=C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0+ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; expira = Vie, 07-Abr-2023 16: 16: 13 GMT; domain=cookie.domain.com; path=/) "

Author: abbood, 2013-04-09

2 answers

Guardar cookies:

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

Restauración de cookies:

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

La phantom es una variable global en PhantomJS. Puede obtener más información en wiki

 63
Author: imos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-09 16:07:09

@imos Gran respuesta! Solo me ayudó y esperaba poder añadir algo más.

También puede agregar cookies individuales a una página utilizando:

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

Esto podría ayudar si hay varios archivos cookie.

 10
Author: Ryguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-17 23:07:54