Hi.
Habe mal wieder ein kleines Problem. Ich möchte mich mit meinem Script auf eine Website einloggen die Session-IDs benutzt und auf der selbigen auch Sachen mit meinem Account anderen etc.
Leider habe ich bis her nur eine sehr mühsehlige Methode, die sich den Quellcode der Seite, nach dem man manuel eingelogt hat, runterläd und in einer Textdatei speichert. Von da aus nutz das Script nur noch diese (und ggf. andere) Textdatei(en).
Vielleicht fällt einem eine bessere Variante ein. Währe nett.
MFG. Guter_Hund
Einloggen mit Session-ID
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Also entweder wird die Session-ID mit einem Cookie übergeben, dass kannst du mit Python auslesen oder die Session-ID wird an jeden Link angehängt, da müsstest du einfach die Seite nach einem Link mit Session-ID durchsuchen.
Gruss
Also entweder wird die Session-ID mit einem Cookie übergeben, dass kannst du mit Python auslesen oder die Session-ID wird an jeden Link angehängt, da müsstest du einfach die Seite nach einem Link mit Session-ID durchsuchen.
Gruss
-
- User
- Beiträge: 19
- Registriert: Montag 4. Dezember 2006, 13:25
Es wird ein Session-Link benutzt.
Code: Alles auswählen
<frameset framespacing="0" border="0" cols="190,*" frameborder="0">
<frame name="Inhalt" target="Hauptframe" src="leftmenu.php?session=e29550f32433" noresize marginwidth="0" marginheight="0">
<frame name="Hauptframe" src="overview.php?session=e29550f32433&w=0&lgn=1" target="_blank">
<noframes>
<body>
<p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht
unterstützt.</p>
</noframes>
</frameset>
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Du musst etwa so vorgehen:
1. Schicke dem Server mit der urllib einen Request mit den Formulardaten (deine Anmeldedaten)
2. Suche in der Antwort vom Server nach "?sessionid=" und lies die Sessionid aus
3. Jeder Request von dir muss nun als GET-Parameter die Session-ID mitschicken.
Gruss
Du musst etwa so vorgehen:
1. Schicke dem Server mit der urllib einen Request mit den Formulardaten (deine Anmeldedaten)
2. Suche in der Antwort vom Server nach "?sessionid=" und lies die Sessionid aus
3. Jeder Request von dir muss nun als GET-Parameter die Session-ID mitschicken.
Gruss
-
- User
- Beiträge: 19
- Registriert: Montag 4. Dezember 2006, 13:25
GET-Parameter? Kenn ich gar nicht. Währe super nett wenn du mir das, vielleicht auch mit code-aufbau, erläuterst.
MFG
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Und lies dir mal das HTTP-Protocol durch:http://de.wikipedia.org/wiki/Hypertext_ ... r_Protocol
Gruss
Gruss
Hallo,
ich habe nun ein ähnliches Problem. Ich möchte mich mit einem Account einloggen (mein skript funktioniert bis dahin gut), nur speichert der Webdienst meinen Nick und mein Passwort in einer Session. Wie kann ich mein Pythonprogramm diese Session "auslesen" lassen und diese auf irgendeine Art speichern, damit nicht die Fehlermeldung kommt dass bei mir Sessions deaktiviert seinen und mein Programm unter dieser Session eingeloogt bleibt?
ich habe nun ein ähnliches Problem. Ich möchte mich mit einem Account einloggen (mein skript funktioniert bis dahin gut), nur speichert der Webdienst meinen Nick und mein Passwort in einer Session. Wie kann ich mein Pythonprogramm diese Session "auslesen" lassen und diese auf irgendeine Art speichern, damit nicht die Fehlermeldung kommt dass bei mir Sessions deaktiviert seinen und mein Programm unter dieser Session eingeloogt bleibt?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hängt ab, wie die Session gespeichert wird. Ich tipe mal darauf, dass die Session auf dem Server gespeichert wird und du ein Cookie bekommst, in dem die Session-ID hinterlagt ist. Dieses Cookie müsstest du also auslesen und bei jedem Request auf die Seitemitschicken.Xabyt hat geschrieben:Wie kann ich mein Pythonprogramm diese Session "auslesen" lassen und diese auf irgendeine Art speichern, damit nicht die Fehlermeldung kommt dass bei mir Sessions deaktiviert seinen und mein Programm unter dieser Session eingeloogt bleibt?
Wie man mit Session-IDs in Cookies umgehen kann, siehst du in changesig.py, einem alten Programm von mir, welches phpBB-Signaturen modifiziert. Das Vorgehen ist analog, lediglich die Beschaffung des Cookies kann anders sein. Das hängt aber ab, ob du das Cookie vom Browser auslesen willst oder das Programm das Cookie direkt anfordern soll.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich bin wie bereits erwähnt noch Anfänger, könntest du mir den Code ein wenig erläutern, oder ggf. die Adresse zu einer Erklärung/ einem Tutorial geben? Es handelt sich um einen Cookie, das ganze wird über PHP gemanaged. Nick und Passwort werden wie erwähnt darin gespeichert. Die Namen unter denen die Cookies gespeichert werden habe ich
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, ein Python-Tutorial solltest du schon gelesen haben und optimalerweise verstanden haben.Xabyt hat geschrieben:könntest du mir den Code ein wenig erläutern, oder ggf. die Adresse zu einer Erklärung/ einem Tutorial geben?
An sich ist der Code ziemlich einfach (und wenn ich so bedenke auch gar nicht so besonders gut. Immerhin funktioniert er), daher wäre es mir lieber wenn du konkrete Fragen stellst - so muss ich nicht Sachen erklären die du sowieso schon weißt. Also wenn du konkrete Fragen hast - schiess los, ich antworte gerne.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo,Leonidas hat geschrieben: Also wenn du konkrete Fragen hast - schiess los, ich antworte gerne.
Also:
Für was ist das Modul "BeautifulSoup" zuständig?
Welche Funktion dieses Skriptes ist für direkte Speicherungen des/eines Cookies verantwortlich? D.h. sowas wie Cookie = addCookie("soheisstdercookie", "So soll sein Ihnalt sein")?
Wie schicke ich dem Server die Cookies so, dass er denkt, dass ich mich eingeloggt hätte? D.h. sowas wie CookieSenden = encodecookie(Cookie)
und das man "CookieSenden" dann an das Skript sendet, so mein ich das.
Dein Skript ist sehr spezialisiert auf das Phpbb, deshalb kann ich das ehrlich gesagt nicht gut ordnen, dazu kommt dass ich Py seit ca. 5 Tagen lerne, danke für jegliche Hilfe.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Fürs HTML-Scraping. Würde zwar auch "von Hand" gehen, aber BeautifulSoup macht es einfach viel einfacher und angenehmer.Xabyt hat geschrieben:Für was ist das Modul "BeautifulSoup" zuständig?
Gespeichert wird der Inhalt des Cookies im Arbeitsspeicher. Und das Cookie an den Request zu hängen ist in der ZeileXabyt hat geschrieben:Welche Funktion dieses Skriptes ist für direkte Speicherungen des/eines Cookies verantwortlich? D.h. sowas wie Cookie = addCookie("soheisstdercookie", "So soll sein Ihnalt sein")?
Code: Alles auswählen
req.add_header('Cookie', self.returncookie)
So wie in der Funktion ``change``.Xabyt hat geschrieben:Wie schicke ich dem Server die Cookies so, dass er denkt, dass ich mich eingeloggt hätte? D.h. sowas wie CookieSenden = encodecookie(Cookie)
und das man "CookieSenden" dann an das Skript sendet, so mein ich das.
Es ist spezialisiert auf phpBB, aber das Konzept Cookie auslesen, Cookie bei Requests mitsenden ist sehr allgemein.Xabyt hat geschrieben:Dein Skript ist sehr spezialisiert auf das Phpbb, deshalb kann ich das ehrlich gesagt nicht gut ordnen, dazu kommt dass ich Py seit ca. 5 Tagen lerne, danke für jegliche Hilfe.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Xabyt!Xabyt hat geschrieben:dazu kommt dass ich Py seit ca. 5 Tagen lerne
Du suchst dir ja auch nicht unbedingt ein einfaches Thema für den Beginn aus. Webprogrammierung ist eine Sache für sich. Es genügt nicht, nur Python zu verstehen, man muss auch das Web und die darin eingesetzten Techniken verstehen. HTTP, GET, POST, <form>, CGI, RESPONSE, REQUEST, usw.
Wenn ich mich irgendwo im Web anmelden muss, bevor ich zu den gesuchten Informationen komme, dann nehme ich meistens
http://wwwsearch.sourceforge.net/ClientCookie/
oder
http://wwwsearch.sourceforge.net/ClientForm/
ClientCookie ist jetzt in http://wwwsearch.sourceforge.net/mechanize/ integriert worden. Wie genau, weiß ich nicht, da ich mechanize noch nie eingesetzt habe. Es ist schon länger her, dass ich ClientCookie angewendet habe.
Wie auch immer. ClientCookie merkt sich die Cookies automatisch, die vom Server geschickt wurden und gibt diese bei jeder weiteren Anfrage an den Server automatisch an diesen zurück. Jetzt musst du nur zuerst die Seite aufrufen, mit der du dich anmelden kannst. Findest raus, wie die Anfrage an den Server lauten muss, damit du angemeldet bist und nachdem du dich angemeldet hast, kannst du jeden URL der Website aufrufen, ohne dich wieder anmelden zu müssen.
Du musst einfach ein bischen probieren und den Quellcode der Anmeldeseite studieren. Die Kombination von ClientCookie und ClientForm ist noch produktiver. Mit ClientForm findest du sehr schnell Formularfelder raus. Du könntest sie damit sogar "virtuell" ausfüllen und den daraus resultierenden Request wieder an den Server schicken. Usw.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
@Gerold: Ich programmiere seit 2 Jahren in PHP und habe auch in Webdesign gut Erfahrungen. Ich weiß was GET (in PHP $_GET[]) und die anderen Requests sind, habe mit MySQL programmiert und auch in Dingen wie AJAX (ein wenig) Erfahrung. Ein absoluter Anfänger bin ich demnach nicht, nur möchte ich jetzt in Python einsteigen und mit einer solchen Art der Programmierung wurde ich bisher noch nicht konfrontiert.
@Leonidas:
Also ist der Teil, in dem dann die Daten meines Cookies gespeichert werden, also der Teil den ich um die Daten meines Cookies umändern muss folgender?
@Leonidas:
Also ist der Teil, in dem dann die Daten meines Cookies gespeichert werden, also der Teil den ich um die Daten meines Cookies umändern muss folgender?
Code: Alles auswählen
def get_cookie(self):
# open the loginpage
http = urllib2.urlopen(self.loginpage)
# read the contents of Set-Cookie
httpcookies = http.headers['Set-Cookie']
# close the connection
http.close()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Richtig.Xabyt hat geschrieben:Also ist der Teil, in dem dann die Daten meines Cookies gespeichert werden, also der Teil den ich um die Daten meines Cookies umändern muss folgender?
Allerdings könntest du erwägen das von Gerold angesprochende mechanize und ClientForm zu verwenden. Meine Lösung ist eben eher "low-level", mit mechanize würden sich da sicher interessante Dinge machen lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich schaue mir Gerolds Lösung nochmal an. Aber in dieser get_cookie Funktion, wo muss ich da die Namen der Cookies der Seite abändern und unter was für einer Variable, die ich dann abrufen kann und an das skript versenden muss, wird der Wert des Cookie gespeichert? Oder habe ich da was falsch verstanden?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
``get_cookie()`` liest einfach alle Cookies aus, die der Server per Set-Cookie-Direktive schickt (und in denen ein Bodenstrich ist) und gibt sie im Returnwert zurück. Das ist im Fall von phpBB ein Datacookie und ein SID-Cookie (siehe ``SignatureCanger.__init__()``, wo die Cookies ausgelesen werden und dann in ``self.returncookie`` verkettet werden).Xabyt hat geschrieben:Aber in dieser get_cookie Funktion, wo muss ich da die Namen der Cookies der Seite abändern und unter was für einer Variable, die ich dann abrufen kann und an das skript versenden muss, wird der Wert des Cookie gespeichert?
Ich würde dir raten, den Quellcode einfach mal ausprobieren und mit einigen ``print``-Statements dir den aktuellen Inhalt der Variablen anzuzeigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo,
Ich habe die Teile des Codes herausgenommen von denen ich dachte dass sie für meinen Bot, also für die Cookies notwendig sind. Nun wird aber immer folgender Fehler ausgegeben:
Ich habe nun auch die urllib2 importiert, hier der betroffene Teil meines Codes:
Ich habe die Teile des Codes herausgenommen von denen ich dachte dass sie für meinen Bot, also für die Cookies notwendig sind. Nun wird aber immer folgender Fehler ausgegeben:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Python24\tubot.py", line 14, in -toplevel-
httpcookies = einbot1.headers['Set-Cookie']
File "C:\Python24\lib\rfc822.py", line 390, in __getitem__
return self.dict[name.lower()]
KeyError: 'set-cookie'
Code: Alles auswählen
...
benutzer = "xabyt"
passwort = "***"
parameter1 = urllib.urlencode({'benutzer': benutzer, 'passwort': passwort, 'action': "Submit"})
einbot1 = urllib2.urlopen ("http://www.team-ulm.de/login.php", parameter1)
httpcookies = einbot1.headers['Set-Cookie']
httpcookies = httpcookies.split()
httpcookies = [cookie[:-1] for cookie in httpcookies if '_' in cookie]
...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
In denen Login-Parametern fehlt noch das Hidden-Field. Außerdem Musst du schauen, welche Header denn Überhaupt übermittelt wurden. In phpBB ist es so, dass man immer ein Cookie hat und dieses Cookie durch den Login zu einem authentifizierten Cookie gemacht wird. Du musst schauen wie das auf Team-Ulm gemacht wird.
Du solltest sowieso erstmal schauen, welche Header überhaupt geschickt werden. Werden Cookie-Header geschickt? Oder wird eine Fehlerseite ausgegeben weil der Login nicht geklappt hat?
Wenn man auf ``http://www.team-ulm.de/login.php`` geht, wird man auf ``http://www.team-ulm.de/login_no.php?mode=userdenied`` umgeleitet. Redirects sollte man vermeiden, da dabei die POST-Daten verloren gehen können.
Du solltest sowieso erstmal schauen, welche Header überhaupt geschickt werden. Werden Cookie-Header geschickt? Oder wird eine Fehlerseite ausgegeben weil der Login nicht geklappt hat?
Wenn man auf ``http://www.team-ulm.de/login.php`` geht, wird man auf ``http://www.team-ulm.de/login_no.php?mode=userdenied`` umgeleitet. Redirects sollte man vermeiden, da dabei die POST-Daten verloren gehen können.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice