Auf Website einloggen?

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.
Jensemann

Hallo zusammen!

Ich plane momentan, folgendes Projekt zu realisieren:

Einige von euch werden vielleicht Comunio kennen, einen Fußballmanager im Internet. Da ich diesen auch sehr gerne spiele, habe ich mir überlegt, dass ich mir ein Programm schreiben könnte, welches die dabei anfallenden Aktivitäten ein wenig für mich überwacht (Transfers etc.).

Hierzu werte ich einfach den HTML-Code aus und kann darauf aufbauend dann die entsprechenden Berechnungen etc. durchführen. Das funktioniert auch schon alles ganz gut soweit, nur leider muss ich mir die HTML-Dateien bislang noch manuell herunterladen.

Wie ich nun mittels Python den HTML-Code einer Seite abrufen kann, ist mir schon klar und ist ja auch nicht wirklich schwer. Das Problem ist aber, dass ich mich natürlich erst einloggen muss, bevor ich überhaupt Zugriff auf den benötigten HTML-Code habe.

Darum meine Frage: Habe ich eine Chance, mich mittels Python auf der Loginseite mit meinen Userdaten einzuloggen? Oder ist dies nur über JavaScript realisierbar? Leider hab ich nicht so viel Ahnung von HTML und JavaScript...

Würde mich sehr freuen, wenn mir jemand bei der Lösung des Problems weiterhelfen könnte :-) Danke auf jeden Fall schon mal!

MfG,
Jensemann
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Da muß du ein wenig coden :)

Entweder du nimmst ein fertiges Framework, oder machst es selber...

Eigen-Werbung-On
Die Idee zum sicheren Login habe ich schon fertig umgesetzt, ist aber noch nicht online...
Hilfreich dabei könnte auch mein CGI-Sessionhandling sein.
Eigen-Werbung-Off

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Jensemann möchte sich auf einer bereits fertigen Website von jemand anderem einloggen und nicht selbst eine Website programmieren.  Da werden ihm Deine Projekte nicht wirklich bei helfen. :wink:
Jensemann

BlackJack hat geschrieben:Jensemann möchte sich auf einer bereits fertigen Website von jemand anderem einloggen und nicht selbst eine Website programmieren. Da werden ihm Deine Projekte nicht wirklich bei helfen. :wink:
Genauso ist es... Vielleicht habe ich ja den Post von Jens missverstanden, aber so wie ich das sehe, hilft mir das nicht dabei, mein Problem zu lösen. Falls doch, dann klärt mich bitte auf :-)

Vielleicht haben ja sonst auch noch andere eine Idee, würde mich sehr freuen :-) Danke noch mal!

MfG,
Jensemann
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Jensemann hat geschrieben: Das Problem ist aber, dass ich mich natürlich erst einloggen muss, bevor ich überhaupt Zugriff auf den benötigten HTML-Code habe.
Hi Jensemann!

Vielleicht funktioniert die Übergabe von Parametern über die URL.
http://www.comunio.de/login.phtml?login=Hallo&pass=Welt

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Ich schätze mal, dass die Seite dir beim Anmelden nen Cookie auf dem System hinterlässt. Im Cookie-Manager von Mozilla kannst du dir die mal anschauen. Die Werte dir dann in die Cookies eingetragen wurden musst du dann mit HTTP mit übertragen, wenn du ne Seite abrufst, damit dir zugriff gewärt wird.

Du solltest dir also mal das HTTP Protokoll und vielleicht die Python Sockets zu Gemüte führen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ProgChild hat geschrieben:Du solltest dir also mal das HTTP Protokoll und vielleicht die Python Sockets zu Gemüte führen.
Ich würde statt sockets eher urllib nutzen..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Jensemann

Leonidas hat geschrieben: Ich würde statt sockets eher urllib nutzen..
Genau das war mein Plan, dieses Modul zu nutzen... Habe nun auch versucht, Eure Vorschläge umzusetzen. Dabei hab ich im Wesentlichen erstmal folgendes gemacht:

Code: Alles auswählen

import urllib
url = urllib.urlopen("http://www.comunio.de/login.phtml?login=Hallo&pass=Welt")
data = url.read()
Wenn ich die URL mit meinen entsprechenden Userdaten im Browser eingebe, führt das auch dazu, dass ich eingeloggt werde. Mit der oben genutzten Variante leider nicht...

Ich habe mir auch mal die Cookies angeguckt, die von Comunio angelegt werden, wenn ich mich eingeloggt habe. Der eine heißt "phpbb2mysql_sid", der andere "phpbb2mysql_data". Die darin jeweils enthaltenen Informationen scheinen verschlüsselt zu sein. Beide werden angelegt, sobald ich mich eingeloggt habe und werden gelöscht, wenn ich wieder ausgeloggt bin.

Da ich es ja bislang noch nicht geschafft habe, mich mittels Python einzuloggen, vermute ich, dass ich auch derartige Cookies aufbauen muss. Dabei stellt sich mir nur die Frage, wie ich sowas in Python überhaupt realisieren kann!? Oder muss ich vielleicht einen ganz anderen Weg wählen? Wäre schön, wenn mich noch mal jemand "an die Hand nimmt"! :-) Danke auf jeden Fall an die bisherigen Poster!

MfG,
Jensemann
Jensemann

Ich hab mich jetzt doch einfach mal selber an die Hand genommen und ein wenig bei google gesucht. Herausgekommen ist das Modul ClientCookie.

Mit diesem kann ich dann folgenden Code ausführen, der dazu führt, dass ich genau auf die Seite komme, die ich haben möchte:

Code: Alles auswählen

import ClientCookie
request = ClientCookie.Request("http://www.comunio.de/login.phtml?login=Hallo&pass=Welt")
response = ClientCookie.urlopen(request)
data = response.read()
Jetzt muss ich nur noch herausfinden, wie ich auf der Seite dann navigieren kann, aber ich denke, dass das dann auch kein Problem mehr sein wird. Falls doch, melde ich mich wieder ;-)

Ansonsten auf jeden Fall noch mal danke!

MfG,
Jensemann
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Jensemann hat geschrieben:Genau das war mein Plan, dieses Modul zu nutzen... Habe nun auch versucht, Eure Vorschläge umzusetzen. Dabei hab ich im Wesentlichen erstmal folgendes gemacht:

Code: Alles auswählen

import urllib
url = urllib.urlopen("http://www.comunio.de/login.phtml?login=Hallo&pass=Welt")
data = url.read()
Wenn ich die URL mit meinen entsprechenden Userdaten im Browser eingebe, führt das auch dazu, dass ich eingeloggt werde. Mit der oben genutzten Variante leider nicht...
Du solltest vermutlich eher den data Parameter der urlopen-Methode nutzen, guck mal in die Doku wie man den benutzt (du brauchst wohl POST, nicht GET).
Jensemann hat geschrieben:Ich habe mir auch mal die Cookies angeguckt, die von Comunio angelegt werden, wenn ich mich eingeloggt habe. Der eine heißt "phpbb2mysql_sid", der andere "phpbb2mysql_data". Die darin jeweils enthaltenen Informationen scheinen verschlüsselt zu sein. Beide werden angelegt, sobald ich mich eingeloggt habe und werden gelöscht, wenn ich wieder ausgeloggt bin.
Nein, Cookies brauchst du wohl nicht, denn pypbb2* Cookies sind Cookies von phpBB, dem Forensystem das auch hier läuft (also hast du von uns auch diese Cookies).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Wenn du das da eingibst, dann musst du die Cookies speichern, die dir übergeben werden und dann bei jedem Aufruf einer Seite an den Server schicken. So läuft das mit Cookies.

Versuch mal in das data Attribut von urllib.urlopen sowas wie:

Code: Alles auswählen

urllib.urlopen( "http://www.test.de", "Cookie: cookiename=cookie_inhalt" )
Außerdem kannst du dir mal http://www.netscape.com/newsref/std/cookie_spec.html aunschaun.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Als erstes muss du schauen wie eingelogged wird (POST oder GET), steht im Formular Quelltext der Seite.

Dann machst du einfach spezielle Url-Requests:

Code: Alles auswählen

    #Formulardaten (im HTML-Code nachschauen
    data = {'ursername':'test',
            'passwort':'gugus'}

    #<form method="POST" oder method="GET" einfach auch im Code nachschauen
    if requestArt == 'post':
        #postdaten mitschicken
        url = urllib2.urlopen(url1,urllib.urlencode(data))
        page = url.read()
        info = url.info()
        url.close()
    elif requestArt == 'get':
        #daten per url schicken
        url = urllib2.urlopen(url1+'?'+urllib.urlencode(data))
        page = url.read()
        info = url.info()
        url.close()
    #cookies auslesen
    cookies = [x.split(';')[0] for x in info['Set-Cookie'].split(', ')]

    url = urllib2.Request(url2)
    #von welcher seite man kommt
    req.add_header('Referer', url1)
    #cookie wieder schicken
    req.add_header('Cookie', ';'.join(cookies))
    url = urllib2.urlopen(req)
    page = url.read()
    url.close()
Guck dir einfach dieses Bsp an, wenn du es verstehst kannst du es an deine bedürnisse anpassen

gruss rayo
oxenfrogga
User
Beiträge: 1
Registriert: Montag 27. Juni 2005, 10:52

Lieber rayo,

ich habe genau dasselbe Problem wie Jensemann ... Ich habe es mit Deinem Beispiel versucht, bin als ziemlicher Neuling jedoch über 'req' gestolpert ... verbirgt sich dahinter ein urllib2.Request-Objekt? Kannst Du bitte ein einem Codeschnipselchen erläutern, wie genau das aussieht?

Besten Dank im voraus,
Oxenfrogga
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Upsi da hat sich ein kleriner Fehler eingeschlichen, sorry :)

Code: Alles auswählen

    #Formulardaten (im HTML-Code nachschauen
    data = {'ursername':'test',
            'passwort':'gugus'}

    #<form method="POST" oder method="GET" einfach auch im Code nachschauen
    if requestArt == 'post':
        #postdaten mitschicken
        url = urllib2.urlopen(url1,urllib.urlencode(data))
        page = url.read()
        info = url.info()
        url.close()
    elif requestArt == 'get':
        #daten per url schicken
        url = urllib2.urlopen(url1+'?'+urllib.urlencode(data))
        page = url.read()
        info = url.info()
        url.close()
    #cookies auslesen
    cookies = [x.split(';')[0] for x in info['Set-Cookie'].split(', ')]

    req = urllib2.Request(url2)
    #von welcher seite man kommt
    req.add_header('Referer', url1)
    #cookie wieder schicken
    req.add_header('Cookie', ';'.join(cookies))
    url = urllib2.urlopen(req)
    page = url.read()
    url.close()
Hoffe so ist es klar, falls du mehr erläuterungen brauchts, melde dich.

Gruss

PS: kann jetzt auch schneller antworten, war vorher in den Ferien :)
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Hallo,

erstmal entschuldigung das ich den alten Hasen hier wieder ausgrab, aber genau das brauch ich...

Hab mal testweise versucht mich hier am Forum anzumelden

Code: Alles auswählen

import urllib2, urllib

#Formulardaten (im HTML-Code nachschauen
data = {'ursername':'mr.hide',
        'password':'*****',
		'login':'Login'}

#<form method="POST" oder method="GET" einfach auch im Code nachschauen


url1 = "http://www.python-forum.de/login.php"

url = urllib2.urlopen(url1,urllib.urlencode(data))
page = url.read()
info = url.info()
url.close()

print page
print info
Leider krieg ich dabei folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "testing.py", line 13, in ?
    url = urllib2.urlopen(url1,urllib.urlencode(data))
  File "D:\APPS\Python_2.3.5\lib\urllib2.py", line 129, in urlopen
    return _opener.open(url, data)
  File "D:\APPS\Python_2.3.5\lib\urllib2.py", line 326, in open
    '_open', req)
  File "D:\APPS\Python_2.3.5\lib\urllib2.py", line 306, in _call_chain
    result = func(*args)
  File "D:\APPS\Python_2.3.5\lib\urllib2.py", line 901, in http_open
    return self.do_open(httplib.HTTP, req)
  File "D:\APPS\Python_2.3.5\lib\urllib2.py", line 886, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error (7, 'getaddrinfo failed')>
>Exit code: 1
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Shame on me :oops:

Ich hock ja hinter nem Proxy ....


Werd das daheim noch mal probieren
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

mr.hide hat geschrieben:Hab mal testweise versucht mich hier am Forum anzumelden

Code: Alles auswählen

data = {'ursername':'mr.hide',
        'password':'*****',
		'login':'Login'}
Hi mr.hide!

Versuchs mit username. In deinem Code ist das falsch geschrieben.
Und das mit dem Proxy ist natürlich auch so ein Problem. :D

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich habe mal ein Script geschrieben, dass sich in phpBB einloggt und die Signatur ändert: changesig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
steve
User
Beiträge: 2
Registriert: Mittwoch 11. Januar 2006, 19:50

Hallo..

Hab gerad erst mit python angefangen, coole Sprache (:
Ich möchte auch ein kleines Loginscript machen, hab aber ein kleines Problem.

Immer wenn ich

Code: Alles auswählen

url = urllib2.urlopen(baseurl,urllib.urlencode(data))
mach, schickt python ein POST und ich bekomm das cookie zurück.

So gehört das auch

aber dannach gleich noch ein "GET /", aber ohne cookie.

Wie kann ich das so umbauen, dass entweder bei dem GET / das cookie dabei ist, oder es nicht gesendet wird? (dann könnt ich ja nacher noch ein urlopen machen, nur halt mit cookie dabei)
Antworten