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 = 'null' then Exit;
MyHTML:=TNetEncoding.URL.Decode(AResultObjectAsJson).DeQuotedString('"');
MyDoc:=CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
MyDoc.designMode:='on';
while MyDoc.readyState <> 'complete' do Application.ProcessMessages;
v:=VarArrayCreate([0, 0], VarVariant);
v[0]:=MyHTML;
MyDoc.Write(PSafeArray(System.TVarData(v).VArray));
MyDoc.designMode := 'off';
while MyDoc.readyState <> 'complete' do 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.