2013-04-09 11 views
27

questa è una domanda su come a persistere i cookie da una pagina all'altra casperjs ..come persistere cookie tra i diversi processi casperjs

in modo sostanzialmente ho ottenuto un file nodejs che genera casperjs come un lavoratore di fare alcuni compiti. uno è quello di accedere, una volta effettuato l'accesso memorizzo il cookie in un file.

quando ho Spawn il prossimo operaio Casper .. voglio in modo da utilizzare al cookie piuttosto dover accedere di nuovo .. entrambi questi metodi fallito:

prima: quando depongono le uova le capserjs lavoratore I aggiungere il --cookies-file =/cookiefilename cioè var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

secondo:. all'interno del file casperjs lavoratore .. mi rendono letto e impostato il cookie da un file ad esempio

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

Note:

  1. Era mentioned in precedenza che start rimuove i cookie dalla pagina? se sì, come posso impedirlo?
  2. So che le sessioni persistono all'interno dell'oggetto stessa pagina phantomjs (vedi qui https://gist.github.com/abbood/5347252) e lo stesso accade all'interno dell'oggetto stessa pagina casperjs (vedi qui https://gist.github.com/abbood/5347287)
  3. tenere a mente che devo conservare i cookie come è nel file (vale a dire senza alcun jSON/biscotto analisi a tutti) .. quindi il mio file cookie appare esattamente come questo

[Generale] cookie = "@ Variante (\ 0 \ 0 \ 0 \ x7F \ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ 0 \ x1 \ 0 \ 0 \ 0 \ n \ 0 \ 0 \ 0YCNTR = LB; scade = Mar, 09-Apr-2013 17:12:05 GMT; dominio = .recruiter.domain.com; path =/\ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; scade = Lun, 30-Mar-2015 16:12:18 GMT; domain = .dominio.com; path =/\ 0 \ 0 \ 0] UIDR = 1365523938; scade = Lun, 30-Mar-2015 16:12:18 GMT; dominio =. Dominio.com; path =/\ 0 \ 0 \ 0 [R_LANG = it; scade = Gio, 09-May-2013 16:16:06 GMT; domain = .recruiter.domain.com; path =/\ 0 \ 0 \ 0 \ x94 \ x43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0; scade = Gio, 09-May-2013 16:16:06 GMT; dominio = .recruiter.domain.com; path =/\ 0 \ 0 \ 0 \ x94WT_FPC = id = 20cf093f17f2c6f3d041365495136954: lv = 1365495369854: ss = 1365495136954; scade = Ven, 07-Apr-2023 08:16:09 GMT; domain = .dominio.com; path =/\ 0 \ 0 \ 0 \ xc4 \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo + ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; scade = Gio, 09-Apr-2015 16:16:10 GMT; domain = statse.domain.com; path =/\ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; scade = Mer, 19-Feb-2020 14:28:00 GMT; domain = .dominio.com; path =/\ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; scade = Ven, 07-Apr-2023 16:16:11 GMT; domain = cookie.domain.com; path =/DCS000065_7K5I \ 0 \ 0 \ 0 \ xbe \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAAAAQQAAAM0 + ZFHNPmRRAQAAAAEAAADNPmRRzT5kUQAAAAA-; scade = Ven, 07-Apr-2023 16:16:13 GMT; domain = cookie.domain.com; Path = /)"

+0

Suoni come questo _potere_ essere un bug. Potrebbe valere la pena pubblicare sulla [pagina CasperJS Google Gruppi] (https://groups.google.com/forum/#!forum/casperjs) se non l'hai già fatto. – thealexbaron

+0

Inoltre, sei sicuro che i cookie vengano letti e analizzati correttamente? – thealexbaron

+0

@thealexbaron Ho fatto [portare] (https://github.com/n1k0/casperjs/issues/175) il problema con Niko, il fondatore di Casper, ancora in attesa della sua risposta .. ma questo è un buon punto che hai fatto per assicurarmi che il cookie sia letto e analizzato con successo .. non sono esattamente sicuro (come in cima alla mia testa) come farlo .. fammi sapere se hai dei suggerimenti .. ma scaverò più a fondo in quello – abbood

risposta

61

Salvataggio cookie:

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

Ripristino biscotti.

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

Il phantom è variabile globale in PhantomJS Maggiori informazioni si possono ottenere in wiki

+0

ugh, perché la F non funziona passando la dannata bandiera. GRAZIE per questa soluzione. –

+2

Login se esempio di cookie su Stack Overflow: https://github.com/cirosantilli/stack-overflow-vote-fraud-script/blob/1477d09ae365c2997ded514539898efd55171091/vote.js Note: 1) 'phantom' è disponibile per impostazione predefinita da CasperJS, non c'è bisogno di richiederlo. 2) 'fs' è anche parte di PhantomJS: http://phantomjs.org/api/fs/method/is-file.html Robots pre-node non modificabili: http://stackoverflow.com/questions/15745394/can -phantomjs-work-with-node-js –

+0

grazie, molto utile – waza123

10

@imos Ottima risposta! Mi ha semplicemente aiutato e speravo di poterne aggiungere ancora.

È inoltre possibile aggiungere i singoli cookie ad una pagina utilizzando:

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

Questo potrebbe aiutare se ci sono più file cookie.

Problemi correlati