Login auf einer Webseite

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Marcus
User
Beiträge: 1
Registriert: Dienstag 3. April 2007, 15:38

Dienstag 3. April 2007, 16:24

Moin,

ich will mich per Python Script auf einer Webseite einloggen, um dort eine Datei herunter zu laden, was auch sonst.

Allerdings ist das Login auf der Seite als Form realisiert und entweder bin ich zu doof oder finde es einfach nicht, aber urllib kann das nicht?!?

Hier die Formulardefinition der Seite:

Code: Alles auswählen

<form name="LoginForm" method="post" action="/login.asp">
<table border="0">
<tr>
<td>Username:</td>
<td><input type="text" name="username" class="boxes" style="width:150px;" value=""></td>
</tr>
<tr>
<td>Password:</td><td><input type="password" name="password" class="boxes" id="Password1" style="width:150px;"></td>
</tr>
<tr>
<td><input type="checkbox" name="remember" value="1" 0>Save password</td>
</tr>
<tr>
<td>
<input type="hidden" name="Check" value="OK" id="Hidden1">
<input  type="submit" name="login" value="Login" style="width:150px;">
<input type="hidden" name="r" value="/">
<input type="hidden" name="t" value="/data/index.asp?">
</td>
</tr></table>
</form>
Ich müsste also die beiden Variablen username und password belegen und die post action auslösen, aber wie geht das mit urllib? Die Dokumentation von der Seite bringt mich auch noch mal um den Verstand. Geht das überhaupt mit urllib und falls nicht, wie geht es dann?

So verständlich ich Python Code normalerweise finde, so wenig verstehe ich die wenigen Beispiele zu urllib.

Es grüßt,
Marcus
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 3. April 2007, 17:09

Deswegen auch urllib2. Ähnlicher Thread dazu.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
pythonist
User
Beiträge: 40
Registriert: Sonntag 14. Mai 2006, 17:28

Freitag 6. April 2007, 00:07

Ich hab dir mal auf die schnelle ne kleine Klasse geschrieben die alles hat was du dazu brauchen solltest, ich habs nicht getestet also keine Garantie auf Funktion:

Code: Alles auswählen

from urllib import urlencode
from BeautifulSoup import BeautifulSoup
import urllib2

class wasweisich:

    def login(self, url, user, pw):
        ws = urllib2.urlopen(url)
        soup = BeautifulSoup(ws.read())
        ws.close()
        postdata = urlencode({"username":user, "password":pw, "remember":1, "Check":soup.find("input", {"name":"Check"})["value"], "login":soup.find("input", {"name":"login"})["value"], "r":soup.find("input", {"name":"r"})["value"], "t":soup.find("input", {"name":"r"})["value"]}
        ws = urllib2.urlopen(url, postdata)
        info = ws.info()
        cookie = [x.split(';')[0] for x in info['Set-Cookie'].split(', ')]
        cookielist = []
        for x in range(0,len(cookie),2):
            cookielist.append(cookie[x])
        self.cookie = ";".join(cookielist)

    def getfile(self, url):
        req = urllib2.Request(url)
        req.add_header('Cookie', self.cookie)
        ws = urllib2.urlopen(req)
        return ws
Wie dus benutzt sollte ja selbsterklärend sein

Gute Nacht

pythonist
Antworten