Seite 1 von 1

Keys für den https-Login identifizieren / Login via python

Verfasst: Sonntag 23. März 2008, 14:40
von DocFisher
Hallo,

mein Ziel ist es, mich via Python auf einer https-Site mit meinem Account einzuloggen.
Mein bisheriges nachlesen hat ergeben, dass als Zutaten urllib.Request, urllib2.urlopen und urllib.urlencode reichen müssten.
Nur funktioniert es bei mir nicht. Ich vermute, dass es daran liegt, dass ich einen falschen POST abschicke.
Hier mal ein Auszug aus dem Quelltext der Seite:
<div class="menuBox2" id="menuBoxLogin">
<div class="menuBox2Head" id="menuBoxHeadLogin">Login</div>
<div class="menuBox2Body" id="menuBoxBodyLogin">
<form action="https://secure.booklooker.de/app/sec/login.php" name="f" method="post">



<input type="hidden" name="do" value="login">
<input style="background: url(/images/dummy.gif) center left #fff; background-repeat: no-repeat;" type="text" name="loginName" id="loginName" value="" size="17" class="search_form" onFocus="this.style.backgroundImage = 'none';" onBlur="if (this.value == '') {this.style.backgroundImage = 'url(/images/login_benutzername_bg.gif)'};"><br>
<img src="/images/dummy.gif" width="10" height="5"><br>
<input style="background: url(/images/dummy.gif) center left #fff; background-repeat: no-repeat;" type="password" name="loginPass" id="loginPass" value="" size="17" class="search_form" onFocus="this.style.backgroundImage = 'none';" onBlur="if (this.value == '') {this.style.backgroundImage = 'url(/images/login_passwort_bg.gif)'};">
<input type="image" src="/images/button_go.gif" border="0" align="absmiddle"><br>
<a href="https://secure.booklooker.de/app/sec/register.php?">Neu registrieren</a>
</form>
<script type="text/javascript">
window.onload = init;
function init() {
if (loginPass = document.getElementById('loginPass')) {
if (loginPass.value == '') {
loginPass.style.backgroundImage = "url(/images/login_passwort_bg.gif)";
}
}
if (loginName = document.getElementById('loginName')) {
if (loginName.value == '') {
loginName.style.backgroundImage = "url(/images/login_benutzername_bg.gif)";
}
}
}
</script>

</div>
<div class="menuBox2Foot" id="menuBoxFootLogin"></div>
</div>
und hier mal mein python-code.

Code: Alles auswählen

import urllib, urllib2
url = "https://secure.booklooker.de/app/sec/login.php"
request = urllib2.Request(url)
data = urllib.urlencode({
    'loginPass' : 'MeinPasswort',
    'loginName' : 'MeinBenutzername'
})

loggedin = open('logged.html', 'wb')

handle = urllib2.urlopen(request, data)
for line in handle:
    try: loggedin.write(line)
    except: pass
handle.close()
loggedin.close()
Nach diesem Versuch lande ich auf einer "Benutzername oder Passwort vergesse?"-Seite. Allerdings wird der Benutzername in das richtige Formularfeld übertragen.
Hat jemand eine Idee, wo der Fehler liegen könnte?

Frohe Ostern,

Doc

Verfasst: Sonntag 23. März 2008, 14:57
von rayo
Hi

Probier mal noch ein:

Code: Alles auswählen

data = urllib.urlencode({
    'loginPass' : 'MeinPasswort',
    'loginName' : 'MeinBenutzername',
    'do': 'login'
})
Da es ja aucht ein verstecktes Input-Feld 'do' gibt.

Gruss

Verfasst: Sonntag 23. März 2008, 15:23
von DocFisher
@rayo:
Guter Hinweis, ich nehme mal die Tomaten von den Augen...
Aber leider funktioniert es immer noch nicht ;-(

Ist aber nicht so dringend, ich "brauche" die Funktion nicht zwingend. Aber wenn das Interesse einmal geweckt ist...

Verfasst: Montag 24. März 2008, 16:10
von fme

Code: Alles auswählen

import urllib
import urllib2
import cookielib

cookies = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
urllib2.install_opener(opener)
header = {'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9b4) Gecko/2008030318 Firefox/3.0b4', 'Accept-Encoding': 'deflate', 'Accept-Charset': 'utf-8'}
login_url = "https://secure.booklooker.de/app/sec/login.php"
post_data = {'do': 'login', 'ssl': 'on', 'loginName': 'DEIN_LOGIN', 'loginPass': 'DEIN_PW', 'x': 45, 'y': 13}
data = urllib.urlencode(post_data)
request = urllib2.Request(login_url, data, header)
url = urllib2.urlopen(request)
html = url.read()
url.close()

print html
Ungetestet, kannst es ja mal versuchen ..., evtl. muss du die Loginseite vorher erstmal ohne POST-Daten aufrufen für den Cookie.

Verfasst: Dienstag 25. März 2008, 03:19
von DocFisher
Hallo fme,

ich habe Deinen Post gerade erst gesehen. Ich werde ihn nach einer Runde schlaf morgen testen.

Aber vorab schonmal Danke!

Verfasst: Mittwoch 26. März 2008, 18:40
von DocFisher
fme, das ist die lösung! Ich danke Dir!

Einen schönen Abend, Doc