Einzelnen Beitrag anzeigen

Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
111 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: auf EdgeBrowser.ExecuteScript warten

  Alt 27. Jun 2024, 10:59
Inwiefern weicht das Ergebnis denn ab?

Es kann natürlich sein, dass das HTML im Browser noch durch Javascript abgeändert wird. Du fragst ja mit document.documentElement.outerHTML nicht den eigentlichen HTML-Quellcode an, der geladen wurde, sondern den aktuellen Stand zum Zeitpunkt der Ausführung. Wenn jetzt Javascript selbst auf das "onload" wartet und Daten nachlädt, sieht das Ergebnis einige Zeit später anders aus.

Du kannst allerdings in Javascript selbst auf ein anderes Event warten, z.B. so:

  EdgeBrowser1.executescript('document.addEventListener("DOMContentLoaded", (event) => { chrome.webview.postMessage(document.documentElement.outerHTML);});'); Das Ergebnis bekommst Du dann über


Delphi-Quellcode:
procedure TForm2.EdgeBrowser1WebMessageReceived(Sender: TCustomEdgeBrowser;
  Args: TWebMessageReceivedEventArgs);
var
  WebMessage: PWidechar;
begin
  args.ArgsInterface.TryGetWebMessageAsString(PWidechar(WebMessage));
  showmessage(Webmessage);
end;
Man kann sich über "DOMContentLoaded" auch direkt in Delphi informieren lassen ohne den Umweg über PostMessage, aber so wie im Beispiel bist Du flexibel, verschiedene Zeitpunkte in Javascript auszuprobieren.

Letztlich könntest Du Dir so auch sparen, den HTML-Code im Nachhinein nochmal mit Python zu parsen. Du kannst die gesuchten Werte direkt per Javascript im Browser auslesen und an Delphi wie oben gezeigt übermitteln, auch im JSON-Format (über args.ArgsInterface.Get_webMessageAsJson).
  Mit Zitat antworten Zitat