Guten Tag,
ich quäle mich jetzt schon etwas länger mit dem allseits bekannten Problem, dass ich ein Formular über den TWebBrowser steuern möchte.
Der Ablauf ist etwa so:
Seite laden
Formular ausfüllen
Seite abschicken
Ergebnis auswerten
Weiter ausfüllen
Wieder abschicken
usw.
Dabei ist es mein Ziel, dass die Aufgaben erst fortgesetzt werden, wenn die Ergebnisseite der vorherigen Abfrage geladen ist. Natürlich habe ich mich schon im Forum umgesehen und
OnDocumentComplete und
WaitforBrowser gefunden. Ich habe versucht beides zu verwenden, bin jedoch gescheitert und kann mir nicht erklären warum.
Hier meine Versuche:
Versuch1:
Delphi-Quellcode:
WebBrowser1.OleObject.Document.forms.item(3).elements.item(20).click;
WaitforBrowser(WebBrowser1);
WebBrowser1.OleObject.Document.ParentWindow.ScrollTo(0, 500);
Delphi-Quellcode:
procedure TForm1.WaitForBrowser(WB: TWebbrowser);
begin
while (WB.ReadyState <> READYSTATE_COMPLETE) // Wärend der STatus ungleich 'fertig'
and not (Application.Terminated) do // und das Programm nicht abgebrochen wurde
begin
Application.ProcessMessages;
Sleep(0); // Hier habe ich sowohl große, als auch kleine Zahlen eingesetzt
end;
end;
Bei meinem Anlauf mit WaitforBrowser ist der Browser bevor das Ergebnis geladen wurde bereits auf die Position gescrollt, auf der das
Ergebnis stehen wird und verliert diese Position wieder, nach dem das Ergebnis geladen wurde.
Versuch2:
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
begin
ShowMessage('
Fertig geladen');
end;
end.
Hierauf springt der Browser niemals an, egal wie viele Ergebnisse geladen werden.
Könnt ihr mir weiterhelfen? Ich hoffe die Lösung ist nicht all zu trivial, mein Delphi-Fachwissen hält sich leider noch in Grenzen.
Grüße
Tana
Jeder noch so kleine Schritt in Richtung Ziel ist ein Schritt in die richtige Richtung.