Programmstatus mit Python abfragen

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.
DANIone
User
Beiträge: 11
Registriert: Sonntag 15. Juni 2008, 19:07
Wohnort: Deutschland

Du meinst also, dass es eh nicht weitergeht im script bis die seite fertig geladen ist?

Das kann natürlich sein, aber dann kann ich mir nicht erklären warum diese schleife hier:

Code: Alles auswählen

from mechanize import Browser

br = Browser()
br.open("myUrl")

a1 = "someText"
a2 = "someText"
succesfull = False
while succesfull == False:
    ready = False
    while ready == False:
        try:
            print br.geturl()
            br["feld1"] = a1
            br["feld2"] = a2
            ready = True
        except:
            ready = False
    br.submit()
    if br.geturl() == "someUrl":
        succesfull = true
Manchmal 1Mal manchmal 2Mal und manchmal öfter durchläuft, bevor es auf einmal zu einer Endlosschleife kommt, wo er immer nur
print br.geturl()
ausführt.
Er bleibt also in der ready-Schleife hängen, weil der try-Block nicht funktioniert und immer wieder der except-Block aufgerufen wird.
Die Felder("feld1" und "feld2") sind aber vorhanden, die Seite ist online, sonst würde es ja nicht manchmal 1mal 2mal etc. klappen...

Meine Theorie war jetzt also dass er irgendwann die Seite nicht schnell genug lädt, deswegen die Felder noch nicht da sind und der except-Block aufgerufen wird...

Was ich nicht verstehe ist jetzt warum er dann in der Endlosschleife hängenbleibt?
Theoretisch müsste er doch die Seite zu Ende laden und im 2. spätestens 3. Durchlauf der ready-Schleife müssten die Felder dann da sein und es müsste wieder weiter im Programm gehen?!

Ich bedanke mich schon einmal für eure Hilfe:)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die konkrete Ausnahme siehst du da ja nicht, weil du sie mit einem ``except`` verschluckt. Soetwas sollte man eigentlich nie machen, weil sie eben alle Fehler, auch solche die du nicht erwartest und die unter Umständen anders behandelt werden sollten bzw. das Programm überhaupt erst dubugbar machen unterdrückst. Lass das ganze ``try`` einfach mal weg. Überhaupt sieht das alles sehr kompliziert aus, was soll das Programm denn eigentlich machen? Formulare mit den gleichen Daten ausfüllen bis irgendwann eine bestimmte URL erreicht wird?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DANIone
User
Beiträge: 11
Registriert: Sonntag 15. Juni 2008, 19:07
Wohnort: Deutschland

Ok also der Error der dann produziert wird ist ein "ControlNotFoundError", wobei die Control ja vorhanden ist, denn durch

Code: Alles auswählen

print br.geturl()
erkenne ich ja, dass der Browser auf derselben Seite ist.
Es muss also denke ich so sein, wie ich angenommen habe, dass die Seite noch nicht fertig geladen ist.

Nein ich fülle die Felder nicht immer mit dem demselben Text aus, sondern habe eine Variable dafür, die ich variiere.
Dies tut er dann solange bis er auf eine bestimmte Seite kommt und Ende...

Was kann ich also tun damit die Seite erst fertig lädt und dann die Control gesucht wird?

Hier nochmal mein jetziger Code:

Code: Alles auswählen

from mechanize import Browser

br = Browser()
br.open('myUrl')

a1 = "someText"
a2 = "someText"
succesfull = False
while succesfull == False:
    print br.geturl()
    #Hier soll jetzt gewartet werden bis die Seite fertig geladen wurde,
    #damit kein ControlNotFoundError kommt
    br.select_form(nr=0)
    br["feld1"] = a1
    br["feld2"] = a2
    br.submit()
    if br.geturl() == "someUrl":
        succesfull = true
Danke für die Hilfe:)
Zuletzt geändert von DANIone am Donnerstag 27. November 2008, 14:21, insgesamt 1-mal geändert.
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

HuHu...

interessantes Thema mit COM. Hat da jemand eine etwas ausfürliche Einführung parat? Hab bisher immer nur kurze Abrisse über das Thema gefunden.

Grüße
D
BlackJack

@DANIone: Bist Du sicher dass das Control *wirklich* da ist? Ich könnte mir durchaus vorstellen, dass die Website mitbekommt, dass jemand in viel zu kurzen Abständen die Seite mit verschiedenen Werten für das selbe Eingabefeld aufruft, und entsprechend eine Seite ausliefert, die zum Beispiel dazu auffordert die Bruteforce-Password-Crack-Versuche bitte zu unterlassen. :twisted:
DANIone
User
Beiträge: 11
Registriert: Sonntag 15. Juni 2008, 19:07
Wohnort: Deutschland

Ja die Control ist wirklich da...
Nein dazu ist die Webseite zu blöd^^

Ich hab es inzwischen übrigens gelöst bekommen, wenn auch auf nicht so elegante Weise, indem ich die Seite jeweils noch einmal aufrufe oder refreshe, denn dann wartet mechanize automatisch bis sie fertig geladen ist...

Wenn jemand eine elegantere Idee hat, schießt los:)

Und nur damit jetzt hier nicht alle wieder was falsches denken, ich habe nicht vor irgendwelcher Leute Passwort zu cracken, es war einfach nur eine kleine programmiertechnische Herausforderung die ich mir gestellt habe...
Antworten