JavaScripts in urllib2 Anfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Guten Abend Zusammen,
ich habe es bereits geschaft das sich mein Python Script auf eine Seite einloggt. Nun möchte ich mich auf einer anderen Seite einloggen, das Problem ist das diese Seite kontroliert ob man JavaScripts erlaubt.

Ist so etwas in Urllib2 möglich das zu Emulieren oder diesen Schutz zu umgehen ?

MfG
BasterTWO
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Der Server kann nicht prüfen, ob der Client JavaScript erlaubt, das macht der Browser. Mit urllib2 und ähnlichen Tools werden nur Dokumente vom Server bezogen, nicht ausgeführt. Der Server liefert entsprechenden JavaScript-Code aus, der bei Ausführung ein anderes Verhalten der Seite liefert (etwa Ein- oder Ausblenden bestimmter Elemente, automatische Weiter- oder Umleitung). Du musst herausfinden, was da passiert, um entsprechend reagieren zu können.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wird denn die Kontrolle ob JavaScript Aktiviert ist durchgeführt? Wenn es einfach ist, kannst du versuchen, das JavaScript zu simulieren, wenn es komplex ist, wirst du es ausführen müssen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Also der Schutz ist durch einen <noscript> Tag eingebaut z.B:

Code: Alles auswählen

<title>Titel der Seite</title><noscript><meta http-equiv="refresh" content="1; URL=http://blabla.de/javascript.html" /></noscript>
Ich hoffe das Hilft, mehr konnte ich auch nicht finden.

BasterTWO
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Na dann sollte deine Seite doch tun, denn die JS-Fehlermeldung kommt ja nur auf der `javascript.html`.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Ich will ja auf der Seite mich einlogge, und muss dafür sorgen das ich eben nicht auf die javascript.html weiter geleitet werde.

BasterTWO
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BasterTWO hat geschrieben:Ich will ja auf der Seite mich einlogge, und muss dafür sorgen das ich eben nicht auf die javascript.html weiter geleitet werde.
Ja dann warum gehst du auf diese Seite überhaupt?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Wenn du die Seite, aus der du zitiert hast, einfach nur herunterlädst, wirst du gar nicht weitergeleitet.
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Habe diesen Tread komplet Vergessen sry.

Aber ich muss mich ja auf der Seite einloggen können. Und das kann ich ja nur über urllib machen wo ich dann weiter geleidet werden.

Jarus
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

`urllib(2)` und Weiterleitung sind zwei verschiedene paar Schuhe. Mit ersterer führst du Requests aus, d. h. du lädst Dokumente (HTML, Stylesheets, JavaScript-Code, Bilder etc.) herunter und/oder übermittelst Daten an den Server (z. B. auch für einen Login).

Eine Weiterleitung kann mit HTML über das ``<meta>``-Tag oder mit JavaScript (``location.href = '/irgendwas';``) realisiert sein. In beiden Fällen beziehst du mit ``urllib2.urlopen(...)`` nur ein Dokument, in dem so ein Konstrukt stehen kann. Du bekommst nur einen String geliefert und es wird weder das HTML geparst und gerendert noch der JavaScript-Code geladen und ausgeführt.

Finde heraus, was genau zum Login führt und erzeuge einen entsprechenden (POST-)Request. Das dürfte vermutlich auch der erste sein, den du überhaupt benötigst, da der Weg zum Login meistens gleich bleibt.
Antworten