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

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Sonntag 23. März 2008, 14:40

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Sonntag 23. März 2008, 14:57

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
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Sonntag 23. März 2008, 15:23

@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...
fme
User
Beiträge: 34
Registriert: Sonntag 1. April 2007, 18:58
Wohnort: Bremen

Montag 24. März 2008, 16:10

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.
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Dienstag 25. März 2008, 03:19

Hallo fme,

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

Aber vorab schonmal Danke!
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Mittwoch 26. März 2008, 18:40

fme, das ist die lösung! Ich danke Dir!

Einen schönen Abend, Doc
Antworten