AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Website von EdgeBrowser in Datei speichern

Offene Frage von "Nico braucht Hilfe"
Ein Thema von Nico braucht Hilfe · begonnen am 4. Aug 2024 · letzter Beitrag vom 5. Aug 2024
Antwort Antwort
Seite 1 von 2  1 2      
Nico braucht Hilfe

Registriert seit: 4. Aug 2024
6 Beiträge
 
#1

Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 11:25
Delphi-Version: 12 Athens
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

Geändert von TBx ( 4. Aug 2024 um 14:07 Uhr) Grund: Delpi-Version angepasst
  Mit Zitat antworten Zitat
Papaschlumpf73

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

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 11:37
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 11:40
12, nicht 5 (siehe Text) ... jemand hat vergessen die Combobox einzustellen, da oben, beim Erstellen des Posts
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

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

Geändert von himitsu ( 4. Aug 2024 um 11:56 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 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
Nico braucht Hilfe

Registriert seit: 4. Aug 2024
6 Beiträge
 
#5

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 12:29
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.

Geändert von Nico braucht Hilfe ( 4. Aug 2024 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

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

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 12:45
M.E. ist das momentan die einzige Möglichkeit, den Quelltext aus dem TEdgeBrowser heraus zu bekommen:
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 - und wer weiß schon, ob es damit besser ginge?
  Mit Zitat antworten Zitat
Papaschlumpf73

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

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 12:48
Wenn du nur das HTML brauchst, kannst du ja mal alles mit "MyDoc" weglassen und nur "MyHTML" verwenden.
  Mit Zitat antworten Zitat
Nico braucht Hilfe

Registriert seit: 4. Aug 2024
6 Beiträge
 
#8

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 12:53
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.
  Mit Zitat antworten Zitat
Nico braucht Hilfe

Registriert seit: 4. Aug 2024
6 Beiträge
 
#9

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 16:33
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
Angehängte Dateien
Dateityp: zip Browser.zip (133,8 KB, 4x aufgerufen)

Geändert von Nico braucht Hilfe ( 4. Aug 2024 um 17:06 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

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

AW: Website von EdgeBrowser in Datei speichern

  Alt 4. Aug 2024, 21:00
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.
Angehängte Dateien
Dateityp: zip Browser.zip (141,8 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz