workaround für fehlerhaft generierte InternetExplorer Dispatch objekte

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
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hallo Freunde,

wahrscheinlich kennt ihr auch das leidige Thema mit den von win32com.client.Dispatch fehlerhaft generierten dynamischen Objekten für InternetExplorer 11 (mindestens).

Beispiel:

Code: Alles auswählen

>>> from win32com.client import Dispatch
>>> ie = Dispatch("InternetExplorer.Application")
>>> ie.Visible = True
>>> ie.Navigate("http://www.leo.org")
>>> search = ie.Document.getElementById("search-field")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: getElementById() takes exactly 1 argument (2 given)
Einige Funktionen werden durch die Bibliothek unter InternetExplorer 11 falsch initialisiert. Der Aufruf an ie.Document.getElementById mit einem Argument (der ID des zu suchenden Elements) ist korrekt. Doch er wird vom Objekt nicht zugelassen, weil angeblich die Bibliothek sagt, dass eine bestimmte Zahl Argumente (wahrscheinlich 0???) benötigt wird. Das habe ich zumindest in einem Thread zu diesem Problem gelesen.
Es gibt einen Workaround, der den Umstand ausnutzt, dass das nicht bei allen Webseiten passiert. Wenn man initial auf eine Webseite geht, bei der der InternetExplorer die richtige Anzahl Argumente angibt, dann wird das dynamische Dispatch Objekt für "Document" richtig initialisiert und kann verwendet werden. Wenn man danach mit demselben IE-Objekt auf die gewünschte Webseite wechselt, wird das bestehende Objekt für "Document" nicht neu generiert und kann auch auf dieser Webseite verwendet werden.
Ich bin aber 1. nicht sicher, ob das eine Lösung für alle falsch initialisierten Lösungen zugleich ist (auch .getElementsByTagName ist z.B. betroffen), zum 2. ist ein Besuch verschiedener Webseiten zum dynamischen Aufbau der Objektstruktur zu umständlich.

Alternative sollte die vorherige Generierung eines gencache Moduls sein. Ich habe es versucht, doch wenn ich die Vorschlagsliste im pythonwin editor anzeigen lasse, fehlen mir eine ganze Reihe Funktionen.

Kennt vielleicht jemand ein vorkompiliertes gencache Modul für den InternetExplorer mit funktionierenden Objekten?
Oder gibt es inzwischen einen anderen Workaround mit überschaubarem Aufwand, um sicher auf die Methoden und Objekte des InternetExplorers zuzugreifen?

Danke für eure Hilfe!

Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten