Seite 1 von 2
Auf Website einloggen?
Verfasst: Dienstag 14. Juni 2005, 15:53
von 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
Verfasst: Dienstag 14. Juni 2005, 16:44
von jens
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
Verfasst: Dienstag 14. Juni 2005, 22:39
von 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.

Verfasst: Mittwoch 15. Juni 2005, 10:09
von 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.

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
Re: Auf Website einloggen?
Verfasst: Mittwoch 15. Juni 2005, 10:27
von gerold
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

Verfasst: Mittwoch 15. Juni 2005, 14:00
von ProgChild
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.
Verfasst: Mittwoch 15. Juni 2005, 14:13
von Leonidas
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..
Verfasst: Mittwoch 15. Juni 2005, 16:25
von 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
Verfasst: Mittwoch 15. Juni 2005, 16:57
von 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
Verfasst: Mittwoch 15. Juni 2005, 16:59
von Leonidas
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).
Verfasst: Mittwoch 15. Juni 2005, 17:00
von ProgChild
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.
Verfasst: Mittwoch 15. Juni 2005, 18:19
von rayo
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
Verfasst: Sonntag 17. Juli 2005, 15:53
von oxenfrogga
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
Verfasst: Samstag 23. Juli 2005, 16:51
von rayo
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

Verfasst: Mittwoch 4. Januar 2006, 09:52
von mr.hide
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
Verfasst: Mittwoch 4. Januar 2006, 10:09
von mr.hide
Shame on me
Ich hock ja hinter nem Proxy ....
Werd das daheim noch mal probieren
Verfasst: Mittwoch 4. Januar 2006, 10:17
von gerold
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.
lg
Gerold

Verfasst: Mittwoch 4. Januar 2006, 16:15
von Leonidas
Ich habe mal ein Script geschrieben, dass sich in phpBB einloggt und die Signatur ändert:
changesig.
Verfasst: Mittwoch 11. Januar 2006, 20:08
von steve
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
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)
Verfasst: Mittwoch 11. Januar 2006, 21:16
von Joghurt