ich würde ganz gerne, eine internetseite, die hinter einem login ( wie zum beispiel in diesem forum ) auslesen. hab unter linux das tool wget und curl gefunden, mit dem das möglich sein könnte. leider hatte ich bis jetzt keine ergebnisse erziehlen können. habe mir die anleitungen zu diesen tools durchgelesen und auch beispiele gefunden, allerdings, alles ohne erfolg. ich kann mich nicht erfolgreich an das login der seiten, anmelden.
ich würde ganz gerne ein kleines python script bauen, um diese aufgabe zu erledigen. eigentlich hat es den hintergrund, das ich chatseiten, in denen ich angemeldet bin, zu bestimmten zeiten, nach neue nachrichten abfragen möchte. wäre das unter python möglich?
wäre für jeden vorschlag dankbar.
curl + webseite parsen
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
Ja, das ist möglich. In der Regel reicht es mir aus, für sowas `urllib2` zu verwenden und bestimmte POST-Requests abzusenden. Ein erhaltenes Cookie muss man dann für jeden Request zu den Headern hinzufügen.
Für solche Jobs wird gerne Mechanize empfohlen, das im Kern vermutlich genau sowas macht, aber einiges an wertvoller Abstraktion bieten dürfte.
Für solche Jobs wird gerne Mechanize empfohlen, das im Kern vermutlich genau sowas macht, aber einiges an wertvoller Abstraktion bieten dürfte.
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
das sieht so weit ganz gut aus. werde ich mich mal mit beschäftigen.
danke
danke
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, es ist quasi ein programmierbarer Browser. Nur eben ohne Rendering-Engine.Y0Gi hat geschrieben:Für solche Jobs wird gerne Mechanize empfohlen, das im Kern vermutlich genau sowas macht, aber einiges an wertvoller Abstraktion bieten dürfte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
ja, das habe ich auch gesehen
jetzt aber meine frage. in dem doku, sehe ich nur ne anleitung um auf dieses standart login von einer html seite ( basic login ). ich brauche jedoch nen login für zum beispiel, diesem forum. dieses benutzt ja php im huintergrund um die entsprechenden felder auszuwerten. dafür habe ich noch kein beispiel gefunden.
weiß da jemand rat, oder habe ich es falsch verstanden?

weiß da jemand rat, oder habe ich es falsch verstanden?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das Beispiel zeigt doch, wie er ein Formular abschickt. Mehr braucht du auch im Python-Forum nicht machen, weil da nur dein Session-Keks aud dem Server auf "ist als $USERNAME eingeloggt" gestellt wird. Die Keks-Verwaltung macht ja Mechanize für dich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
ja, glaube habs verstanden. bekomme zwar noch fehlermeldungen, aber liegt wohl an mir
falls es nicht klappen sollte, melde ich mich noch mal.
hmmm, ich versuche ein control ( text ) aus dem formular, so zu füllen:

hmmm, ich versuche ein control ( text ) aus dem formular, so zu füllen:
ich weiß, das das eingabefeld "nickname" heißt. bekomme dann diese felermeldungform.set_value(["engelexael"], name="nickname")
Traceback (most recent call last):
File "webmess.py", line 10, in <module>
form.set_value(["engelexael"], name="nickname")
File "build/bdist.linux-i686/egg/ClientForm.py", line 2932, in set_value
File "build/bdist.linux-i686/egg/ClientForm.py", line 1328, in __setattr__
TypeError: must assign a string
das feld wird auch gefunden, trotzdem, wenn ich da etwas reinschreiben will, wie oben beschrieben, funtzt es trotzdem nicht, oder wie verwende ich ein text control ?
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
habs dann rausgefunden, so muß die zeile dann heißen
jetzt gibts das nächste problem. die seite, die ich abfragen möchte ( www.onlineglueck.de ) hat dann links die memberliste stehen, die user die gerade online sind. die müßste ich ja eigentlich mit zurückbekommen, wenn ich den request ebgeschickt habe. bekomme aber nichts wirklich brauchbares zurück.
zu mindest kann ich mich erfolgreich einloggen und bekomme keine fehlermeldung, das ich den nicknamen oder password falsch eingegeben hätte.
aber wie bekomme ich so nen frame ( denke ich wirds sein ), ausgelesen?
EDIT:
sehe gerade, bekomme nur htlm zurück. brauche aber die komplette seite, auch was mir der server per php sendet, also das was ich auch im browser sehen kann.
Code: Alles auswählen
form["nickname"] = "engelexael"
zu mindest kann ich mich erfolgreich einloggen und bekomme keine fehlermeldung, das ich den nicknamen oder password falsch eingegeben hätte.
aber wie bekomme ich so nen frame ( denke ich wirds sein ), ausgelesen?
EDIT:
sehe gerade, bekomme nur htlm zurück. brauche aber die komplette seite, auch was mir der server per php sendet, also das was ich auch im browser sehen kann.
PHP sendet dir auch nur generiertes HTML.The Hit-Man hat geschrieben:sehe gerade, bekomme nur htlm zurück. brauche aber die komplette seite, auch was mir der server per php sendet, also das was ich auch im browser sehen kann.
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
dann muss es irgendwas anderes sein, bekomme, die userliste nicht in den html text ( den ich ja parsen muß ). auch wenn ich mir den source der seite anschaue, fehlt da alles drin. auch wenn ich es einfach mit wget mache, und ohne mich einzuloggen ( weil brauche ich nicht unbedingt ), fehlt die ganze liste. das ist lles, was ich von der www.onlineglueck.de seite wieder bekomme.
doch wenn man sich die seite anschaut, sind ja links die ganzen user zu sehen, die gerade online sind.
des weiteren fehlen ja auch die ganzen eingabefelder und so weiter.
Code: Alles auswählen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>onlineglueck.de - Die Single- & Flirtcommunity</title>
<link REL="shortcut icon" HREF="/favicon.ico" TYPE="image/x-icon">
<link rel="bookmark" href="http://www.onlineglueck.de/" title="Onlineglück">
<meta name="title" content="Onlineglück, die grosse Flirtcommunity">
<meta name="author" content="Virtual Minds AG">
<meta name="copyright" content="Virtual Minds AG">
<meta name="publisher" content="Virtual Minds AG">
<meta name="distribution" content="worldwide">
<meta name="revisit-after" content="7 days">
<meta http-equiv="expires" content="7 days">
<meta name="keywords" content="shortmessage, flirt, single, kontakt, community, kennenlernen, herzklopfen, chat, photo, foto, sexyvote, paar, liebe, einsam, Onlineglück, Onlineglueck, flirttext, flirtmail, gemeinschaft, kummer, verlieben, lieben, beziehung, sms, hochzeit, heirat, foren, forum, diskussion, glück">
<meta name="description" content="Community für Singles, mit Kontaktanzeigen, Flirt-Foren, Flirt-Chat, Shortmessage Funktion und unzähligen weiteren Funktionen.">
<meta name="abstract" content="Community für Singles, mit Kontaktanzeigen, Flirt-Foren, Flirt-Chat, Shortmessage Funktion und unzähligen weiteren Funktionen.">
<meta name="robots" content="INDEX,FOLLOW">
<meta name="rating" content="general">
<meta name="resource-type" content="document">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<frameset rows="*" border="0">
<frame name="main" frameborder="0" src="/olg/">
<noframes>
Community für Singles, mit Kontaktanzeigen, Flirt-Foren, Flirt-Chat, Shortmessage Funktion, Sexy-vote, Paar-vote und unzähligen weiteren Funktionen.<br>
Sie brauchen mindestens einen Browser der 4er Generation um diese Seite zu betrachten!<br>
Wir bitten um Ihr Verständnis!
<a href="http://kontaktanzeigen-flirten-singles.de/">Kontaktanzeigen Flirten Singles Community Treffen</a>
</noframes>
</frameset>
</html>
des weiteren fehlen ja auch die ganzen eingabefelder und so weiter.
Das sagt dir doch, weswegen du die "falsche Seite" siehst ...Sie brauchen mindestens einen Browser der 4er Generation um diese Seite zu betrachten!
Wir bitten um Ihr Verständnis!
Was sendest du denn als User-Agent?
*edit*
Probiere es mal mit http://www.onlineglueck.de/olg/
Dann bekommst du die Seite ohne Frames.
Sollte dann gehen.
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
das sieht auf jeden fall schon mal besser aus, was ich da zurück bekomme. das scheint die hauptseite zu sein
jetzt muß ich vielleicht nur noch schauen, wie links die userliste heißt. glaube, habe sie im source code gefunden. schaue später mal eben nach, muß los, zur arbeit.
*EDIT*
habe zwei links in dem source gefunden, die weiterhelfen könnten:
Traceback (most recent call last):
File "webmess.py", line 6, in <module>
form = forms[0]
IndexError: list index out of range
hitman@basis:~$ python webmess.py
Traceback (most recent call last):
File "webmess.py", line 6, in <module>
form = forms[0]
IndexError: list index out of range
bekomme allerdings, wenn ich einen dieser links , mit mechanize abfrage, diese meldungen:
mit wget, bekomme ich jetzt zwar die hauptseite, aber noch immer nicht die userliste, die online sind. und mit den links, wie oben, komme ich nicht weiter, weils fehlermeldungen gibt.
*EDIT*
mit wget kann ich beide links benutzen und ich bekomme auch die memberliste
aber warum funktioniert mein eigener code nicht, hier mein beispiel:
mit dem code, bekomme ich, wie oben beschrieben, diese fehlermeldung von python
.

*EDIT*
habe zwei links in dem source gefunden, die weiterhelfen könnten:
Code: Alles auswählen
<iframe width="170" height="175" id="ifr_f" name="ifr_f" src="http://www.onlineglueck.de/olg/useronline.olg?gender=f" marginheight="0" marginwidth="0" frameborder="0"></iframe>
<iframe width="170" height="175" id="ifr_m" name="ifr_m" src="http://www.onlineglueck.de/olg/useronline.olg" marginheight="0" marginwidth="0" frameborder="0"></iframe></td>
File "webmess.py", line 6, in <module>
form = forms[0]
IndexError: list index out of range
hitman@basis:~$ python webmess.py
Traceback (most recent call last):
File "webmess.py", line 6, in <module>
form = forms[0]
IndexError: list index out of range
bekomme allerdings, wenn ich einen dieser links , mit mechanize abfrage, diese meldungen:
Code: Alles auswählen
Traceback (most recent call last):
File "webmess.py", line 6, in <module>
form = forms[0]
IndexError: list index out of range
hitman@basis:~$ python webmess.py
Traceback (most recent call last):
File "webmess.py", line 6, in <module>
form = forms[0]
IndexError: list index out of range
*EDIT*
mit wget kann ich beide links benutzen und ich bekomme auch die memberliste

Code: Alles auswählen
from urllib2 import urlopen
from ClientForm import ParseResponse
response = urlopen("http://www.onlineglueck.de/olg/useronline.olg")
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
# print form
form["nickname"] = "mein benutzername"
form["password"] = "mein passwort"
urlopen(form.click()).read()
print urlopen(form.click()).read()
.
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
ja, da hast du schon recht. die sache ist die. ich möchte mich an die hauptseite einloggen ( das geht ja jetzt auch ). dann möchte ich mit dem eingeloggtem cookie auf die seite springen, links, in dem die usernamen stehen. das geht natürlich auch ohne einzuloggen, mit wget. jedoch denke ich schon ein bischen weiter und möchte zu der seite springen, in dem angeziegt wird, ob sich neue nachrichten, in diesem chat für mich befinden. dafür muß ich angemeldet sein. wie soll das gehen? der link um in den persönlichen nachrichten ordner zu kommen, würde ja jetzt auch im quelltext der seite stehen. des weiteren gibt der chat mir an, wieviele neue nachrichten ich bekommen habe. genau diese sachen, mag ich auch gerne abfragen. mein tool, soll ja so was werden, wie eine art messenger. vielleicht sogar nen plugin für den pidgin.
ob ich als seiten-adresse, einfach den link, für die persönlichen nachrichten eintrage?
*EDIT*
das wäre der link zum persönlichen ordner. wenn ich den im browser eintrage und mich auf einen anderen TAB an die seite angemeldet habe, bekomme ich wirklich meine mails angezwigt. nehme ich den lin, wenn ich mich nicht angemeldet habe, erscheint ein login. dieses kann ich auch mit wertden füllen, bekomme jedoch, was anderes zurück.
ob ich als seiten-adresse, einfach den link, für die persönlichen nachrichten eintrage?
*EDIT*
das wäre der link zum persönlichen ordner. wenn ich den im browser eintrage und mich auf einen anderen TAB an die seite angemeldet habe, bekomme ich wirklich meine mails angezwigt. nehme ich den lin, wenn ich mich nicht angemeldet habe, erscheint ein login. dieses kann ich auch mit wertden füllen, bekomme jedoch, was anderes zurück.
Code: Alles auswählen
http://www.onlineglueck.de/olg/shortmessages/?folder=1
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du surfst mit Mechanize die eine Seite an, loggst dich dort ein und surfst dann die andere Seite an. Mechanize behält ja die Cookies und sendet sie mit.The Hit-Man hat geschrieben:ja, da hast du schon recht. die sache ist die. ich möchte mich an die hauptseite einloggen ( das geht ja jetzt auch ). dann möchte ich mit dem eingeloggtem cookie auf die seite springen, links, in dem die usernamen stehen. das geht natürlich auch ohne einzuloggen, mit wget. jedoch denke ich schon ein bischen weiter und möchte zu der seite springen, in dem angeziegt wird, ob sich neue nachrichten, in diesem chat für mich befinden. dafür muß ich angemeldet sein. wie soll das gehen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
ja, verstehe. nur wie surfe ich die neue seite, denn dann an? einfach den respone tauschen? oder wie verstehe ich das?
*EDIT*
bekomme immer nur dieses zurück, obwohl dort ja meine persönlichen nachrichten aufgelistet sein sollten.
*EDIT*
bekomme immer nur dieses zurück, obwohl dort ja meine persönlichen nachrichten aufgelistet sein sollten.
Code: Alles auswählen
<html>
<head>
<title>onlineglueck.de</title>
<script language="javascript">
var reloadTime=50000;
function reload(){
if(typeof parent.frames[0] != "undefined") {
if(typeof parent.frames[0].frames['reloader'] != "undefined"){
parent.frames[0].frames['reloader'].location.href = '/olg/reload.olg';
window.setTimeout("reload()",reloadTime);
}
}
}
window.setTimeout("reload()",reloadTime);
</script>
</head>
<frameset rows="100%,0" FRAMEBORDER=0 BORDER=0 FRAMESPACING=0>
<frame src="/olg/index.olg?update=ok" name="olgmain">
<frame src="/olg/reload.olg" noresize name="reloader">
</frameset>
</html>
<html>
<head>
<title>onlineglueck.de</title>
<script language="javascript">
var reloadTime=50000;
function reload(){
if(typeof parent.frames[0] != "undefined") {
if(typeof parent.frames[0].frames['reloader'] != "undefined"){
parent.frames[0].frames['reloader'].location.href = '/olg/reload.olg';
window.setTimeout("reload()",reloadTime);
}
}
}
window.setTimeout("reload()",reloadTime);
</script>
</head>
<frameset rows="100%,0" FRAMEBORDER=0 BORDER=0 FRAMESPACING=0>
<frame src="/olg/index.olg?update=ok" name="olgmain">
<frame src="/olg/reload.olg" noresize name="reloader">
</frameset>
</html>
<html>
<head>
<title>onlineglueck.de</title>
<script language="javascript">
var reloadTime=50000;
function reload(){
if(typeof parent.frames[0] != "undefined") {
if(typeof parent.frames[0].frames['reloader'] != "undefined"){
parent.frames[0].frames['reloader'].location.href = '/olg/reload.olg';
window.setTimeout("reload()",reloadTime);
}
}
}
window.setTimeout("reload()",reloadTime);
</script>
</head>
<frameset rows="100%,0" FRAMEBORDER=0 BORDER=0 FRAMESPACING=0>
<frame src="/olg/index.olg?update=ok" name="olgmain">
<frame src="/olg/reload.olg" noresize name="reloader">
</frameset>
</html>
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Einfach ein weiteres ``br.open()``.The Hit-Man hat geschrieben:ja, verstehe. nur wie surfe ich die neue seite, denn dann an? einfach den respone tauschen? oder wie verstehe ich das?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
komisch, ich hatte es so versuchen zu lösen, wie in der doku beschrieben, ist das etwa nicht richtig? deshalb fragte ich auch, wie ich eine neue seite ansurfe.
somit, kann ich mich zu mindest einloggen
irgendwie habe ich wohl gerade ne blockarde
völlig verwirrt, irgendwie.
Code: Alles auswählen
response = urlopen("http://www.onlineglueck.de/olg")
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
form["nickname"] = "mein nickname"
form["password"] = "mein passwort"
urlopen(form.click())
irgendwie habe ich wohl gerade ne blockarde

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du nutzt ClientForm, wir sprechen hier aber die ganze Zeit schon von Mechanize. Warum nutzt du es denn nicht? Das Beispiel ist doch direkt auf der ersten Seite, die dir dazu verlinkt wurde.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
ja, ich dachte, ich nutze das die ganze zeit !!!! hab ja extra nen bookmark auf die seite gemacht, und hatte mir doch die beispiele angesehen.
http://wwwsearch.sourceforge.net/mechanize/
ich bin da wohl dann auf ClientForm gestoßen, auf der seite. habe die beispiele jedoch gesehen, aber irgendwie, ist mir da bis jetzt noch unklar, wie ich mich einloggen soll.
bin wohl nicht richtig klar gekommen, damit die felder für nickname und passwort zu füllen. ich schaus mir noch mal an.
*EDIT*
nach dem beispiel nach, wirds ja so gemacht.
danach sollte ich noch das passwort setzen und den submit machen. jedoch bekomme ich bei dem nicknamen schon diese meldung:
*EDIT*
die zeile muß so heißen, dann gehts:
argh !!!!!!!!!!!!! jetzt loggt er sich nicht mal vernünftig ein
bekomme also immer die meldung vom server, das ich nicht eingeloggt sein
*grummel*
http://wwwsearch.sourceforge.net/mechanize/
ich bin da wohl dann auf ClientForm gestoßen, auf der seite. habe die beispiele jedoch gesehen, aber irgendwie, ist mir da bis jetzt noch unklar, wie ich mich einloggen soll.
bin wohl nicht richtig klar gekommen, damit die felder für nickname und passwort zu füllen. ich schaus mir noch mal an.
*EDIT*
nach dem beispiel nach, wirds ja so gemacht.
Code: Alles auswählen
import re
from mechanize import Browser
br = Browser()
br.open("http://www.onlineglueck.de/olg/")
br.select_form(name="loginfrm")
br["nickname"] = ["mein nickname"]
Code: Alles auswählen
TypeError: must assign a string
die zeile muß so heißen, dann gehts:
Code: Alles auswählen
br["nickname"] = "mein nickname"

