node.js - cómo persistir las cookies entre los diferentes procesos de casperjs
session phantomjs (2)
esta es una pregunta acerca de cómo persistir las cookies de una página de casperjs a otra ..
así que, básicamente, obtuve un archivo nodejs que genera casperjs como trabajador para realizar ciertas tareas ... una es para iniciar sesión, una vez que estoy conectado guardo la cookie en un archivo.
cuando engendro al próximo trabajador casper ... quiero que use la cookie en lugar de tener que volver a iniciar sesión ... ambos métodos fallaron :
primero: cuando engendro el worker capserjs agrego el --cookies-file =. / cookiefilename ie var child = spawn(''casperjs'',[''scrape.js'',''--cookies-file=./''+cookieFileName]);
segundo: dentro del archivo de trabajo de casperjs ... Lo hago leer y configurar la cookie de un archivo, es decir,
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:
- se mentioned anteriormente que
start
elimina las cookies de la página? si es así, ¿cómo lo evito? - Sé que las sesiones persisten dentro del mismo objeto de la página phantomjs (ver aquí https://gist.github.com/abbood/5347252 ) y lo mismo ocurre dentro del mismo objeto de la página casperjs (ver aquí https://gist.github.com/abbood/5347287 )
- tenga en cuenta que almaceno las cookies como está en el archivo (es decir, sin ningún tipo de análisis json / cookie) ... así que mi archivo de cookies se ve exactamente como este
[General] cookies = "@ Variant (/ 0 / 0 / 0 / x7f / 0 / 0 / 0 / x16QList / 0 / 0 / 0 / 0 / x1 / 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 = lunes, 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 = en; expires = Jue, 09-may-2013 16:16:06 GMT; domain = .recruiter.domain.com; path = / / 0 / 0 / 0 / x94 / x43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0; expires = 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-; expires = Jue, 09-abr-2015 16:16:10 GMT; domain = statse.domain.com; path = / / 0 / 0 / 0Yv1st = CE061E87215F2D73; ex pires = mié, 19-feb-2020 14:28:00 GMT; dominio = .dominio.com; ruta = / / 0 / 0 / 0 / x84 / x43OOKIE_ID = 178.135.147.39-2368749744.30291261; expira = viernes, 07-abr-2023 16:16:11 GMT; dominio = cookie.domain.com; path = / DCS000065_7K5I / 0 / 0 / 0 / xbe / x41 / x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0 + ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; expira = vie, 07-abr-2023 16:16:13 GMT; dominio = cookie.domain.com; ruta = /) "
@imos ¡Gran respuesta! Simplemente me ayudó y esperaba poder agregar algo más.
También puede agregar cookies individuales a una página usando:
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 múltiples archivos de cookies.
Guardando cookies:
var fs = require(''fs'');
var cookies = JSON.stringify(phantom.cookies);
fs.write(cookieFilename, cookies, 644);
Restaurando cookies:
var fs = require(''fs'');
var data = fs.read(cookieFilename);
phantom.cookies = JSON.parse(data);
El phantom
es una variable global en PhantomJS. Más información que puede obtener en wiki