Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Website von EdgeBrowser in Datei speichern (https://www.delphipraxis.net/215604-website-von-edgebrowser-datei-speichern.html)

Nico braucht Hilfe 4. Aug 2024 10:25

Delphi-Version: 12 Athens

Website von EdgeBrowser in Datei speichern
 
Hallo

Ich verwende Delphi 12 und baue mir gerade einen EdgeBrowser für ein Projekt.
Der EdgeBrowser funktioniert auch schon und ich kann Seiten aufrufen usw.

Ich muss nun aber die Webseite lokal speichern.

Ein zusätzliches Hindernis gibt es hierbei aber leider noch (sonst wäre es wohl auch zu einfach)

Die Webseite beinhaltet ein Java-Script dass andere Seitenteile nachlädt.
Das kennt man heute von vielen Webseiten, der Edge / EdgeBrowser zeigt die Seite aber bereits vollständig an.

Der echte Edge-Browser zeigt im Quelltext nur die Seite ohne den nachgeladenen Inhalt.
Bei Seite speichern als "nur Html" wird dort auch nur der Quelltext gespeichert und der Inhalt fehlt
Bei Seite speichern als "Webseite vollständig" speichert er die Seite mit dem über Java nachgeladenen Inhalt (und ggf. Bildern usw., die ich aber nicht brauche)

Ich brauche die Seite unbedingt mit dem nachgeladenen Inhalt.

Ich vermute / hoffe dass das was ich brauche irgendwie möglich ist.
Aber leider weis ich nicht wie.

PS: Ich verwende Delphi zwar schon seit über 20 Jahren aber mit EdgeBrowser
kenne ich mich leider gar nicht aus. Für einen Tipp wäre ich denkbar.

Vielen Dank für jede Hilfe.
Nico

Papaschlumpf73 4. Aug 2024 10:37

AW: Website von EdgeBrowser in Datei speichern
 
Das wird eine wirklich schwierige Nummer werden. Zumal es ja selbst die großen Browser nicht hinbekommen, eine Webseite wirklich vollständig zu speichern. Und wie bekommt man eigentlich den Edge-Browser unter Delphi 5 zum Laufen? Und warum benutzt du noch Delphi 5?

himitsu 4. Aug 2024 10:40

AW: Website von EdgeBrowser in Datei speichern
 
12, nicht 5 (siehe Text) ... jemand hat vergessen die Combobox einzustellen, da oben, beim Erstellen des Posts :zwinker:
https://www.delphipraxis.net/newthre...newthread&f=32

Zitat:

Der echte Edge-Browser zeigt im Quelltext nur die Seite ohne den nachgeladenen Inhalt.
Eigentlich nein ... wie im Firefox, wird der Quellcode neu runtergeladen, wenn man "Seitenquelltext anzeigen" aufruft, sowie Speichern ... also nicht wirklich der aktuelle Text :wall:

Da wirst du dich wohl mit dem aktuellen Document (DOM) verbinden müssen und dort das aktuelle HTML rausholen müssen.

Papaschlumpf73 4. Aug 2024 11:10

AW: Website von EdgeBrowser in Datei speichern
 
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.

Nico braucht Hilfe 4. Aug 2024 11:29

AW: Website von EdgeBrowser in Datei speichern
 
Das mit delphi 5 ist ein Missverständnis.
Dort geht das natürlich nicht.
Ich verwende Delphi 12.

Dass ich warten muss bis die Seite fertig geladen ist weis ich. Das dauert etwas länger ist aber kein Problem.
Diesem Teil kriege ich selber hin.

Ich brauche das script nur so dass es den Inhalt der Seite dann speichert.

Der angebotene Quelltext scheint die Seite neu zu laden bzw. aus dem Quelltext neu aufzubauen.
Das wird nicht funktionieren. Bedingt durch die Seite.
Die Seite wurde ja bereits geladen und ist vollständig.
So wie sie im edgebrowser ist muss ich sie speichern.
Es wird nicht möglich sein die Seite aus dem Quelltext und den scripten neu zu laden. Aber versuchen werde ich es mal. Danke.

Papaschlumpf73 4. Aug 2024 11:45

AW: Website von EdgeBrowser in Datei speichern
 
M.E. ist das momentan die einzige Möglichkeit, den Quelltext aus dem TEdgeBrowser heraus zu bekommen:
Delphi-Quellcode:
EB1.ExecuteScript('encodeURI(document.documentElement.outerHTML)');
Dadurch sollte die Seite eigentlich nicht neu geladen werden.

Ansonsten müsste man wahrscheinlich direkt über die WebView2-APIs gehen. Das ist aber nichts für Einsteiger :-D - und wer weiß schon, ob es damit besser ginge?

Papaschlumpf73 4. Aug 2024 11:48

AW: Website von EdgeBrowser in Datei speichern
 
Wenn du nur das HTML brauchst, kannst du ja mal alles mit "MyDoc" weglassen und nur "MyHTML" verwenden.

Nico braucht Hilfe 4. Aug 2024 11:53

AW: Website von EdgeBrowser in Datei speichern
 
Ich versteh den Quelltext leider nicht.

Ich nehme an dass hier der Quelltext der Seite ermittelt wird.
Dann die Scripte darin (nochmal) ausgeführt werden um die Seite in der vollständigen Version zu erzeugen. So wie sie im Edgebrowser zu sehen ist.

Oder sehe ich das falsch ?
Falls ja wie genau funktioniert das ?
Sorry falls ich mich etwas umständlich anstelle.

Auch mit mydoc und myhtml kann ich leider nichts anfangen.
Ich programmiere seit 25 Jahren aber deswegen kennt man eben auch nicht alles.

Nico braucht Hilfe 4. Aug 2024 15:33

AW: Website von EdgeBrowser in Datei speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Ich bekomme diese Quelltexte bei mir leider nicht rein.
Es werden nur Fehler angezeigt. Siehe mein Bsp. in der Anlage hier als Zip.

Danke
Nico

Papaschlumpf73 4. Aug 2024 20:00

AW: Website von EdgeBrowser in Datei speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dein Beispiel habe ich jetzt so angepasst, dass der HTML-Text der im EdgeBrowser angezeigten Seite im Memo1 ausgegeben wird. Von da aus kannst du es in eine Datei speichern oder sonstwas damit machen. Sieht auch nicht so aus, als würde die Seite dabei neu geladen werden. Alles was darüber hinaus geht, ist aber deutlich komplexer und ich muss morgen wieder arbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz