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. :wink:

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

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 :oops:

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. :D

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

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)

Verfasst: Mittwoch 11. Januar 2006, 21:16
von Joghurt