Einzelnen Beitrag anzeigen

Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
435 Beiträge
 
Delphi 12 Athens
 
#4

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 12:10
So mache ich das, wenn ich Webseiten mit dem EdgeBrowser (hier im Beispiel EB1) Seiten auslese. Keine Ahnung, ob das für deine Zwecke funktioniert:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    var ScriptCompleteEB1: boolean;
    var MyDoc: IHTMLDocument2;
    var MyHTML: String;
Zuerst zur Website navigieren und warten, bis die vollständig geladen ist. Ab dann:
Delphi-Quellcode:
EB1.ExecuteScript('encodeURI(document.documentElement.outerHTML)');
WaitForScriptComplete(EB1);
Und jetzt das Ergebnis auslesen:
Delphi-Quellcode:
procedure TForm6.EB1ExecuteScript(Sender: TCustomEdgeBrowser; AResult: HRESULT; const AResultObjectAsJson: string);
var v: Variant;
begin
if AResultObjectAsJson = 'nullthen Exit;
MyHTML:=TNetEncoding.URL.Decode(AResultObjectAsJson).DeQuotedString('"');
MyDoc:=CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
MyDoc.designMode:='on';
while MyDoc.readyState <> 'completedo Application.ProcessMessages;
v:=VarArrayCreate([0, 0], VarVariant);
v[0]:=MyHTML;
MyDoc.Write(PSafeArray(System.TVarData(v).VArray));
MyDoc.designMode := 'off';
while MyDoc.readyState <> 'completedo Application.ProcessMessages;
ScriptCompleteEB1:=true;
end;
Jetzt warten, bis das Skript ausgeführt ist
Delphi-Quellcode:
procedure TForm6.WaitForScriptComplete(EB: TEdgeBrowser);
var TimeOutAt: Cardinal;
begin
ScriptCompleteEB1:=false;
TimeOutAt:=GetTickCount+15000; {15 Sekunden}
while (ScriptCompleteEB1=false) and (GetTickCount<TimeOutAt) do
 begin Sleep(100); Application.ProcessMessages; end;
if (ScriptCompleteEB1)
then Wait(500)
else raise Exception.Create('TimeOut in WaitForScriptComplete abgelaufen');
end;

So, und jetzt dürft ihr alle meinen Code zerreißen Mir egal, er funktioniert perfekt für meine firmeninternen Zwecke.

Geändert von Papaschlumpf73 ( 4. Aug 2024 um 12:16 Uhr)
  Mit Zitat antworten Zitat