Login auf Webseite; 2 cookies = problem ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Login auf Webseite; 2 cookies = problem ?

Beitragvon Sunjy » Donnerstag 16. April 2009, 21:47

Hey, also ich komm hier grad nicht weiter.
Mein Problem ist dass ich mich auf einer Website einloggen möchte. Ich habe mir bereits eine Funktion geschrieben, welche dies für mich erledigt damit ich ganz normal mit urllib2.urlopen('url').read() den Quelltext auslesen kann.
Allerdings funktionierts bei einer Seite nicht. Ich hab mir sagen lassen die Seite legt 2 Cookies an . aber eigentlich sollte das ja kein Problem sein. In den Python docs steht ja heim Cookie Handling drin dass es mit cookieS umgeht...

Wie dem auch sei ich geb euch mal meinen bisherigen Code:

Code: Alles auswählen

# -*- coding: cp1252 -*-
import urllib2
import cookielib
import urllib

def login(loginurl):
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

    headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8',
    'Accept' : ' text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
    'Accept-Language' : 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3',
    'Accept-Encoding' : 'gzip,deflate',
    'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
    'Keep-Alive' : '300',
    'Connection' : 'keep-alive',
    'Referer' : 'http://www.google.de',
    }

    values = {'loginName':'blabla-name', 'password':'blabla-pass' }
    data = urllib.urlencode(values)
    request = urllib2.Request(loginurl, data, headers)
    url = opener.open(request)
    urllib2.install_opener(opener)
    print urllib2.urlopen(urllib2.Request('http://www.wer-kennt-wen.de/start', None, headers)).read()

login('http://www.wer-kennt-wen.de')


aus dem Code geht ja hervor dass es sich um wkw handelt. Nunja bei dem print in der Funktion (nur zu Testzwecken dort ;) ) sollte eigentlich dann der Quelltext ausgegeben werden von der wkw.../start seite. wird es aber nicht ich bekomme immer eine wo drauf steht, dass mein Browser keine Cookies akzeptieren würde. Was ja aber schlecht sein kann denn in Zeile 7/8 sorg ich ja dafür dass er damit umgeht.

Hat einer Rat ?

Danke schonmal,
mfg
Sunjy
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Donnerstag 16. April 2009, 22:57

Willst du wirklich den Quelltext in deinem Python-Programm oder willst du nur automatisch einloggen?
Wenn es nur um das einloggen geht, kannst du das viel einfacher realisieren und direkt über deinen Browser machen.

Und dein CookieBeispiel funktioniert so natürlich noch nicht.
Was z.B. fehlt:

Code: Alles auswählen

cj.load(Filename)

Schau dir z.B. diese Seite mal noch an, finde es ziemlich gut beschrieben
http://www.voidspace.org.uk/python/arti ... elib.shtml
Den Teil mit ClientCookie kannst ja ignorieren.
Zuletzt geändert von ms4py am Donnerstag 16. April 2009, 23:09, insgesamt 1-mal geändert.
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Beitragvon Sunjy » Donnerstag 16. April 2009, 23:03

es soll alles in python geschehen ( und ohne mechanize )
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Donnerstag 16. April 2009, 23:13

Code: Alles auswählen

def login(loginurl):
    cj = cookielib.CookieJar()
    cj.load("test.dat")
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)

    headers = { #dein code
    }

    values = {'loginName':'blabla-name', 'password':'blabla-pass' }
    data = urllib.urlencode(values)
    request = urllib2.Request(loginurl, data, headers)
    handle = urllib2.urlopen(request)
    print handle.read()


Ungetestet.
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Beitragvon Sunjy » Freitag 17. April 2009, 01:05

ice2k3 hat geschrieben:Ungetestet.

geht auch leider nicht. ich weis auch nicht ganz was du versuchst. cj.load() kann nicht gehen laut docs gibt es nur bei FileCookieJar() ein load(). Ich habe mich aber von dir inspirieren lassen und habe das Cookie mit

Code: Alles auswählen

    cj = cookielib.FileCookieJar('test.dat')
    cj.load('test.dat')

in eine Datei geschrieben und geladen. Es war leider nicht erfolgreich.

Aber ich glaube nicht dass es daran liegt ob ich es in einer Datei speicher oder nicht. es muss etwas anderes sein ich hab aber leider absolut keine Ahnung was.

Sunjy
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Freitag 17. April 2009, 07:19

Und so?
Ist alles aus dem Tutorial mit dem Link oben:

Code: Alles auswählen

cj = cookielib.LWPCookieJar()
cj.load('test.dat')
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Beitragvon Sunjy » Freitag 17. April 2009, 12:30

leider geht auch das nicht, ich bekomme die Fehlermeldung:
LoadError: 'test.lwp' does not look like a Set-Cookie3 (LWP) format file

allerdings habe ich nicht gesehen dass du in deinem Beitrag oben einen link hattest, bzw. editiert hast. den hab ich mir mal angeschaut.
Doch leider bringt mir auch das Tutorial nichts (welches ich übrigens nicht so gut finde. die ganzen try except else 's nerven ziemlich. ich meine man weis ja im Normalfall ob man etwas importieren kann / getan hat oder eben nicht. aber das ist ein anderes Thema.

Aber Irgendwie muss es ja gehen :/
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Freitag 17. April 2009, 17:11

Nimm doch einfach mal das gesamte Beispiel aus dem Tutorial und versuch es damit.
Das gibt es hier:
http://code.activestate.com/recipes/302930/

Das load darfst du übrigens nicht machen ;) Vielleicht geht es ja schon, wenn du das rausschmeißt. Ansonsten das Beispiel mal testen.
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Beitragvon Sunjy » Samstag 18. April 2009, 10:35

okay ich habs mal versucht. das Gute ist ich bekomme nun eine andere errorpage zurück. nämlich dass meine Sitzung abgelaufen wäre (und ich cookies aktivieren solle ^^).
ich glaub ich mach mal nen tag pause...
weitere ideen sind trotzdem erwünscht für morgen dann ^^

Vielen dank für deine bisherige (und durchhaltende) Hilfe auch wenns leider nicht so klappt bisher.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Samstag 18. April 2009, 11:35

Versuch's mal mit der Mechanize-Bibliothek. Die's eigentlich für solche Aufgaben gedacht... und ich hab sie auch immer benutzt.
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Beitragvon Sunjy » Samstag 18. April 2009, 11:49

naja wie ich bereits sagt wollte ich es eigentlich ohne mechanize machen.
dafür gibts mehrere Gründe, einer davon wäre, dass ich damit noch absolut keine Erfahrung habe und nicht weis wie ich damit umgehen soll. und naja die Dokumentation ist... bescheiden...
sogar bei google find ich nicht wirklich ein brauchbares tutorial und zudem gibts da noch den kram mit "robots" und sehr viele seiten erlauben dies nicht.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 19. April 2009, 09:01

Wenn die ``robots.txt`` das nicht erlauben, dann solltest du das auch nicht machen. Die sind ja nicht zum Spaß da.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

Beitragvon cryzed » Sonntag 19. April 2009, 10:23

Code: Alles auswählen

browser = mechanize.Browser()
browser.set_handle_robots(False) # "robots.txt" ignorieren
browser.open("http://www.wer-kennt-wen.de/start") # Seite öffnen
browser.select_form(nr=0) # Erste (und einzige) Form auf der Seite anwählen
browser["loginName"] = "blabla-name" # Die Werte für die Form setzen
browser["pass"] = "blabla-pass"
browser.submit() # Die form mit den Werten abschicken

Ab da an kümmert sich mechanize um alles weitere. Die ".open" Methode gibt ein "file-like" Objekt zurück, d.h um den Source der resultierende Seite zu bekommen kannst du einfach ".read()" aufrufen.
Zuletzt geändert von cryzed am Freitag 25. Dezember 2009, 20:27, insgesamt 1-mal geändert.
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Beitragvon Sunjy » Sonntag 19. April 2009, 15:00

Leonidas hat geschrieben:Wenn die ``robots.txt`` das nicht erlauben, dann solltest du das auch nicht machen. Die sind ja nicht zum Spaß da.

Da hast du schon recht. Aber ich weis im Grunde gar nicht so wirklich über diese robots.txt bescheid. Um ehrlich zu sein interessiert es mich auch nicht sonderlich, ich habe lediglich einmal etwas mit mechanize >versucht< und es klappte nicht, zusätzlich kam eben noch etwas mit rorbots.txt. Vllt sollt ich mir doch mal nen Artikel dazu durchlesen... naja is eben net mein Spezialgebiet.

cryzed hat geschrieben:Ab da an kümmert sich mechanize um alles Weitere. Die ".open" Methode gibt ein "file-like" Objekt zurück, d.h um den Source der resultierende Seite zu bekommen kannst du einfach ".read()" aufrufen.

Danke dein Code funktioniert genau so wie ich das wollte. Eigentlich wollte ich es zwar ohne mechanize machen aber wenn ich es anders nicht hinbekomme solls mir auch so recht sein. Danke :)


Falls allerdings noch irgendwer wirklich weis wieso mein ganz oben geposteter Code nicht funktioniert, kann er es mir ja mitteilen ^^.


Danke für die Hilfe :)
Sunjy
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

Beitragvon cryzed » Sonntag 19. April 2009, 15:25

Ich vermute mal das du der Seite einen falschen Parameter übergibst. Der Bezeichner "password" heißt nämlich eigentlich nur "pass". Falls du den Mozilla Firefox benutzt empfehle ich dir das Add-on Firebug für solche Dinge.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]