Unvollständige Weiterleitung ?! Problem mit urllib

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Guten Abend,


Ich habe das Problem, dass ich nach einem POST-Request über urllib.request nicht - so wie erwartet - auf eine bestimmte Seite weiter geleitet werde.
Stattdessen erhalte ich folgdenen HTML Schnipsel von dem Server:

Code: Alles auswählen

<script language="JavaScript">
<!-- 

function redirect() {
window.location = "hier steht die URL, auf die ich weiter geleitet werden SOLLTE";
}

timer = setTimeout('redirect()', '0');

-->
</script>
Wie der Name der JavaScript funktion schon sagt, sollte ich doch auf die angegebene Seite weiter geleitet werden?!
Was mir jedoch etwas komisch vor kommt und wenn mich meine Kenntnisse in HTML nicht vollkommen übers Ohr hauen, dann steht doch die Funktion in einem Kommentar drin, jedoch wenn ich den Schnipsel in eine HTML Datei kopiere und dann via Browser öffne, werde ich problemlos auf die gewünschte Seite weiter geleitet.

Gibt es da eine Möglichkeit in Python, dass ich nicht bei diesem Schnipsel HTML hängen bleibe, sondern dass der request von Python direkt auf der korrekten Seite landet?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

JavaScript in HTML Kommentaren ist kein Problem, das Problem ist das Python urllib kein JavaScript interpretiert. Bei deinem Problem kannst du dich allerdings einfach selber darum kümmern und dem Link folgen.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Sr4l hat geschrieben:Bei deinem Problem kannst du dich allerdings einfach selber darum kümmern und dem Link folgen.

Genau das soll Python für mich machen. Ansonten wäre das Programm vollkommen nutzlos :)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brainsucker: es wird wohl einen Grund geben, dass die Weiterleitung normalerweise nur mit Browsern, die interaktiv benutzt werden, funktioniert.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Sirius3 hat geschrieben:@Brainsucker: es wird wohl einen Grund geben, dass die Weiterleitung normalerweise nur mit Browsern, die interaktiv benutzt werden, funktioniert.
Ob das stimmt, dass es ausschließlich nur mit einem "normalen" Browser funktioniert, wage ich stark zu Bezweifeln. Das heißt es muss definitiv noch andere Lösungen geben und nach genau diesen suche ich hier. Es mag schon richtig sein, dass dieses "Hindernis" nicht ohne Grund existiert^^
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Brainsucker hat geschrieben:
Sr4l hat geschrieben:Bei deinem Problem kannst du dich allerdings einfach selber darum kümmern und dem Link folgen.
Genau das soll Python für mich machen. Ansonten wäre das Programm vollkommen nutzlos :)
Python kann das für dich machen wenn du ihm hilfst, du suchst mit Python in dem HTML nach dem Link und öffnest ihn so wie du alle anderen Links auch öffnest. Verstehst du was ich meine?

Es gibt eigentlich keine andere praktikable Lösung, wenn man vom "automatisieren" von Webbrowsern absieht.

JavaScript zu interpretieren ist noch der einfachere Teil, man muss auch die Datenstruktur von der Website (DOM https://de.wikipedia.org/wiki/Document_Object_Model) abbilden.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Problem kann man in Python entweder mit nem JavaScript-Parser oder mit einem regulären Ausdruck lösen. Letzteres könnte so aussehen (Ausgabe aus der Python-Shell):

Code: Alles auswählen

>>> code
'<script language="JavaScript">\n<!--\n \nfunction redirect() {\nwindow.location = "hier steht die URL, auf die ich weiter geleitet werden SOLLTE";\n}\n \ntimer = setTimeout(\'redirect()\', \'0\');\n \n-->\n</script>'
>>> re.search('window.location = "(.*)";', code).group(1)
'hier steht die URL, auf die ich weiter geleitet werden SOLLTE'
Das setzt natürlich voraus, dass der JS-Code immer exakt das von dir angegebene Muster hat. Ansonsten kommt man mit dieser Variante schnell in Teufels Küche.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

snafu hat geschrieben:Das setzt natürlich voraus, dass der JS-Code immer exakt das von dir angegebene Muster hat. Ansonsten kommt man mit dieser Variante schnell in Teufels Küche.
Die Webseite, auf die weiter geleitet wird ist immer exakt die selbe. Das Problem dabei ist jedoch, dass die Website, auf die ich weiter gleitet werde erkennen muss, dass ich von der genau VORHERIGEN Seite, weiter gleitet wurde und ich daher keinen stupiden neuen request machen kann, weil sonst mein Vorhaben nicht funktioniert.

Gibt's denn eventuell etwas, dass ich den HEADER von meinem request so manipulieren kann, um der Website "vorzugaukeln", dass ich von Seite X weiter geleitet wurde?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brainsucker: dafür gibt es den Referer, den Du im Header mitschicken mußt.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Danke erstmal für die Antworten. Ich werd mich mal die Tage dran setzen und berichten :)
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Du kannst dir auch noch das Modul Requests (http://docs.python-requests.org/en/late ... uickstart/ ) anschauen.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Sr4l hat geschrieben:Du kannst dir auch noch das Modul Requests (http://docs.python-requests.org/en/late ... uickstart/ ) anschauen.
Das sieht auf den ersten Blick sehr viel versprechend aus. Da werde ich auf jeden Fall nochmal rein schauen. :)
Antworten