2013-04-09 14 views
27

ist dies eine Frage, wie Cookies von einer casperjs Seite zur anderen zu bestehen bleiben ..wie Cookies zwischen verschiedenen casperjs anhalten verarbeitet

also im Grunde habe ich eine Datei, die NodeJS casperjs als Arbeiter zu tun, bestimmte Aufgaben laicht. Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 Wenn man eingeloggt ist, speicher ich den Cookie in einer Datei.

, wenn ich das nächste casper Arbeiter laichen .. ich will es das Cookie verwenden, eher wieder mit anmelden .. diese beiden Methoden fehlgeschlagen:

zuerst:, wenn ich die Arbeiter capserjs laichen I fügen sie das --cookies-file =/cookiefilename dh var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

Sekunde. im casperjs Arbeiter Datei .. ich es gelesen und das Cookie aus einer Datei dh

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

Hinweise:

  1. es ist mentioned früher, dass start entfernt Cookies von der Seite? Wenn ja, wie verhindere ich das?
  2. Ich weiß, dass Sitzungen bestehen innerhalb des gleichen PhantomJS Seite Objekts (siehe hier https://gist.github.com/abbood/5347252) und gleiche geschieht in dem gleichen casperjs Seite Objekt (siehe hier https://gist.github.com/abbood/5347287)
  3. im Auge zu behalten, dass ich Cookies speichern, wie in der Datei ist (dh ohne json/Cookie-Analyse überhaupt) .. so meine Cookie-Datei sieht genauso aus wie diese

[General] Cookies = "@ Variant (\ 0 \ 0 \ 0 \ x7F \ 0 \ 0 \ 0 \ x16QList \ 0 \ 0 \ 0 \ x1 \ 0 \ 0 \ n \ 0 \ 0 \ 0YCNTR = LB; läuft ab = Di, 09-Apr-2013 17:12:05 GMT; Domäne = .recruiter.domain.com; Pfad =/\ 0 \ 0 \ 0qUID = 13eb22f-2.21.171.120-1365523938; abläuft = Mon, 30-Mar-2015 16:12:18 GMT; Domäne = .domain.com; Pfad =/\ 0 \ 0 \ 0] UIDR = 1365523938; abläuft = Mo, 30-Mar-2015 16:12:18 GMT; Domäne = .domain.com; Pfad =/\ 0 \ 0 \ 0 [R_LANG = de; abläuft = Do, 09-May-2013 16:16:06 GMT; Domäne = .recruiter.domain.com; Pfad =/\ 0 \ 0 \ 0 \ x94 \ x43 = 4gpUmUGr2jgDrs4xOJVrGaNbD8DtYSd1E6quyLhe3E4F3EAGhbRJucnDgRVDeHh0; läuft ab = Do, 09-May-2013 16:16:06 GMT; Domäne = .recruiter.domain.com; Pfad =/\ 0 \ 0 \ 0 \ x94WT_FPC = ID = 20cf093f17f2c6f3d041365495136954: lv = 1365495369854: ss = 1365495136954; läuft ab = Fr, 07-Apr-2023 08:16:09 GMT; Domäne = .domain.com; Pfad =/\ 0 \ 0 \ xc4 \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAAAAAmyoBAMo + ZFHhPWRRAQAAAAJWAADKPmRR4T1kUQAAAAA-; läuft ab = Do, 09-Apr-2015 16:16:10 GMT; Domäne = stat.domain.com; Pfad =/\ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; abläuft = Mi, 19-Feb-2020 14:28:00 GMT; Domäne = .domain.com; Pfad =/\ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; läuft ab = Fr, 07-Apr-2023 16:16:11 GMT; Domäne = cookie.domain.com; Pfad =/DCS000065_7K5I \ 0 \ 0 \ 0 \ xbe \ x41 \ x43OOKIE = C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEYNjEAAAAAAAAAAAQQAAAAM0 + ZFHNPmRRAQAAEAAAAAAAAAAAAAAAA-; läuft ab = Fr, 07-Apr-2023 16:16:13 GMT; Domäne = cookie.domain.com; path = /)“

+0

Klingt wie dies ein Fehler sein _might_. Es könnte sich lohnen, auf der [CasperJS Google Groups-Seite] (https://groups.google.com/forum/#!forum/casperjs) zu posten, falls Sie dies noch nicht getan haben. – thealexbaron

+0

Sind Sie sicher, dass die Cookies erfolgreich gelesen und analysiert werden? – thealexbaron

+0

@thealexbaron Ich habe [bringen] (https://github.com/n1k0/casperjs/issues/175) das Problem mit Niko, dem Gründer von Casper auf, immer noch auf seine Antwort warten .. aber das ist ein guter Punkt, den Sie gemacht darum, sicherzustellen, wird das Cookie erfolgreich gelesen und analysiert .. ich ist nicht ganz sicher, (aus der Spitze von meinem Kopf), wie das zu tun .. lemme wissen, wenn Sie Anregungen bekommen .. aber ich werde tiefer in diese – abbood

Antwort

61

Speichern von Cookies:

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

Wiederherstellen Cookies.

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

Die phantom ist globale Variable in PhantomJS Weitere Informationen, die Sie in bekommen können wiki

+0

ugh, warum funktioniert das F nicht, indem man die verdammte Flagge passiert? DANKE für diese Lösung. –

+2

Anmeldung, wenn Cookies Beispiel auf Stack-Überlauf: https://github.com/cirosantilli/stack-overflow-vote-fraud-script/blob/1477d09ae365c2997ded514539898efd55171091/vote.js Anmerkungen: 1) 'phantom' standardmäßig von CasperJS verfügbar ist, keine Notwendigkeit, es zu verlangen. 2) 'fs' ist auch Teil von PhantomJS: http://phantomjs.org/api/fs/method/is-file.html Unveränderbare Vor-Knoten-Sachen: http://StackOverflow.com/Questions/15745394/can -phantomjs-work-with-node-js –

+0

danke, sehr nützlich – waza123

10

@imos Große Antwort! Es half mir einfach und ich hoffte, dass ich noch etwas hinzufügen könnte. mit

können Sie auch einzelne Cookies zu einer Seite hinzufügen:

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

Dies könnte helfen, wenn es mehrere Cookie-Dateien sind.

Verwandte Themen