comment conserver les cookies entre les différents processus casperjs

C’est une question sur la façon de conserver les cookies d’une page à l’autre de casperjs ..

Donc, fondamentalement, j’ai un fichier nodejs qui génère Casperjs en tant qu’employé pour effectuer certaines tâches. L’une consiste à se connecter, une fois connecté, je stocke le cookie dans un fichier.

quand je déclencherai le prochain ouvrier casper .. je veux qu’il utilise le cookie plutôt que de devoir se connecter à nouveau .. ces deux méthodes ont échoué :

Premièrement: quand je crée le gestionnaire capserjs, j’ajoute le –cookies-file =. / cookiefilename, c’est-à-dire var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

deuxième: dans le fichier worker de casperjs .. je le fais lire et définir le cookie à partir d’un fichier

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

Remarques:

  1. il a été mentionné précédemment que start supprime les cookies de la page? si oui comment puis-je empêcher cela?
  2. Je sais que les sessions persistent dans le même object de page phantomjs (voir ici https://gist.github.com/abbood/5347252 ) et qu’il en est de même dans le même object de page casperjs (voir ici https://gist.github.com/ abbood / 5347287 )
  3. Gardez à l’esprit que je stocke les cookies tels quels dans le fichier (c’est-à-dire sans aucune parsing json / cookie) .. de sorte que mon fichier cookie ressemble exactement à ceci

[Général] cookies = “@ Variant (\ 0 \ 0 \ 0 \ x7f \ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ 0 \ 0 \ x1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0YCNTR = LB; expire = mar, 09-avr-2013 17:12:05 GMT; domaine = .recruiter.domaine.com; chemin = / \ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; expire = lun, 30 -Mar-2015 16:12:18 GMT; domaine = .domaine.com; chemin = / \ 0 \ 0 \ 0] UIDR = 1365523938; expire = lundi, 30-mars-2015 16:12:18 GMT; domaine = .domain.com; chemin = / \ 0 \ 0 \ 0 [R_LANG = en; expire = jeu, 09-mai-2013 16:16:06 GMT; domaine = .recruiter.domain.com; chemin = / \ 0 \ Vocabule est en train de changer : lv = 1365495369854: ss = 1365495136954; expire = ven, 07-avr.-2023 08:16:09 GMT; domaine = .domainu; = = 0 0 ZFhhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; expires = Thu, 09-Apr-2015 16:16:10 GMT; domain = statse.domain.com; chemin = / \ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; pires = mercredi 19 février 2020 à 14h28:00 GMT; domaine = .domain.com; chemin = / \ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; expire = ven, 07-avr-2023 16:16:11 GMT; domain = cookie.domain.com; path = expire = ven, 07-avr-2023 16:16:13 GMT; domain = cookie.domain.com; chemin = /) ”

Enregistrement de cookies:

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

Restauration des cookies:

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

Le phantom est une variable globale dans PhantomJS. Plus d’informations que vous pouvez obtenir dans le wiki

@imos Excellente réponse! Cela m’a simplement aidé et j’espérais pouvoir en append un peu plus.

Vous pouvez également append des cookies individuels à une page en utilisant:

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

Cela pourrait aider s'il y a plusieurs fichiers de cookies.