AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser
Thema durchsuchen
Ansicht
Themen-Optionen

Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

Ein Thema von herik · begonnen am 26. Jun 2024 · letzter Beitrag vom 27. Jun 2024
Antwort Antwort
herik

Registriert seit: 17. Okt 2007
Ort: Spitzkunnersdorf / Sachsen
15 Beiträge
 
Delphi 11 Alexandria
 
#1

Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 26. Jun 2024, 05:21
Hallo Gemeinde,

Ich bin dabei Daten von einem Webseite zu holen.
Hierbei bin ich aber auf ein Problem gestoßen, welches ich nicht in den Griff bekomme.

Zu meinem vorgehen.

Ich verwende TEdgeBrowser um mir den Quelltext der betreffenden Webseite nach dem ausführen des JavaScript zu holen.
Den Quelltext Speicher ich im Anschluss in eine Datei.

Delphi-Quellcode:
procedure TForm2.EdgeBrowser1NavigationCompleted(Sender: TCustomEdgeBrowser;
  IsSuccess: Boolean; WebErrorStatus: TOleEnum);
begin
  EdgeBrowser1.ExecuteScript('encodeURI(document.documentElement.outerHTML)');
end;
Delphi-Quellcode:
procedure TForm1.EdgeBrowser1ExecuteScript(Sender: TCustomEdgeBrowser;
  AResult: HRESULT; const AResultObjectAsJson: string);
var
  OutputSL: TStringList;
begin
  if AResultObjectAsJson <> 'nullthen
  begin
    OutputSL := TStringList.Create;
    try
      OutputSL.Text := TNetEncoding.URL.Decode(AResultObjectAsJson).DeQuotedString('"');
      OutputSL.Text := HTMLEntitiesDecode(OutputSL.Text);
      Memo1.Text := OutputSL.Text;


      OutputSL.SaveToFile(ExtractFilePath(ParamStr(0)) + '\Quelltext.txt', TEncoding.UTF8);
      Edgebrowser1.NavigateToString(OutPutSl.Text);
    finally
      OutputSL.Free;
    end;
  end;
end;
Das funktioniert erstmal augenscheinlich. Der Quelltext wird ordentlich in eine Datei geschrieben.



Im nächsten Schritt will ich mit Python und beautifulsoup Werte auslesen. Und genau hier liegt nun mein Problem.
Wenn ich nun mein Python Script über meine gespeicherte Datei laufen lasse, werden keine Werte erkannt.


Bei genauerer Kontrolle des Quelltextes nach dem es durch beautifulsoup geparst wurde, entstehen haufenweise Stellen wo ">" durch "&gt" oder ">" durch "&lt" ersetzt wurden.
Also konnte der Parser den durch den EdgeBrowser ausgegebenen Quelltext nicht richtig parsen.

In der Gespeicherten Datei (Ausgegebener Quelltext durch EdgeBrowser) sind die Zeichen "&gt" und "&lt" nicht zu finden!

Code:
Datei = open("Quelltext.txt", "r" , encoding='utf-8')
So öffne ich die Datei im Python.


Nun weiß ich nicht recht wo ich ansetzen kann um zu meinem Gewünschten Ergebnis zu kommen.

Zur Kontrolle hatte ich noch folgende Zeile im Delphi mit eingefügt.
Edgebrowser1.NavigateToString(OutPutSl.Text); Dies übergibt den Quelltext erneut an den EdgeBrowser und wird dann angezeigt.
Aber auch hier wird nicht alles Richtig angezeigt. Es scheint so, als wenn genau diese Bereiche die Python nicht lesen kann, auch hier fehlen.

Eventuell habt Ihr ja eine Idee wo ich noch nachschauen kann, oder was ich noch anders machen kann.

Wenn Ihr mehr Informationen Braucht, dann bitte fragen. Ich wollte das Thema jetzt hier nicht so überladen.

Vielen Dank schon mal
Erik
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

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

AW: Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 26. Jun 2024, 05:54
Warum kodierst Du den HTML-Quelltext in Javascript noch mit EncodeURI? Du bekommst doch sowieso den Text als JSON zurück.

Das hier genügt:

  EdgeBrowser1.executescript('document.documentElement.outerHTML');

Und dann
Delphi-Quellcode:
uses System.json, System.IOUtils;
...

procedure TForm2.EdgeBrowser1ExecuteScript(Sender: TCustomEdgeBrowser;
  AResult: HRESULT; const AResultObjectAsJson: string);
var
  json: TJSONValue;
begin
  json := TJSONObject.ParseJSONValue(AResultObjectAsJson);
  TFile.writeAllText('test.html', json.AsType<string>, TEncoding.UTF8);
  json.Free;
end;
  Mit Zitat antworten Zitat
herik

Registriert seit: 17. Okt 2007
Ort: Spitzkunnersdorf / Sachsen
15 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 26. Jun 2024, 08:25
Hallo gubbe,

Warum ich EncodeURI verwende, ganz einfach. Ich wusste es nicht besser und habe mich dabei auf DIESE WEBSEITE bezogen.

Das das nicht so optimal war hast du mir zum Glück gesagt!


Ich habe jetzt einfach mal deine Variante verwendet und es läuft so wie ich es wollte.


Vielen herzlichen Dank an der Stelle!
Erik
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
107 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 26. Jun 2024, 13:22
Warum ich EncodeURI verwende, ganz einfach. Ich wusste es nicht besser und habe mich dabei auf DIESE WEBSEITE bezogen.
Der Fairness halber muss erwähnt werden, dass im nächsten Absatz auf der Webseite steht, dass man das JSON auch wieder dekodieren soll.

PS: Das Projekt Python4Delphi kennst du schon?
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

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

AW: Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 26. Jun 2024, 13:29
Der Fairness halber muss erwähnt werden, dass im nächsten Absatz auf der Webseite steht, dass man das JSON auch wieder dekodieren soll.
Hat er doch gemacht. Nur ist das obere Kodieren unnötig, da das Ergebnis als JSON zurückgegeben wird, was dann sowieso schon kodiert wird. URLEncode kodiert eben auch URLs und ist hier für den Quelltext auch nur bedingt geeignet, denn beim Umwandeln in JSON werden möglicherweise Zeichen nochmal kodiert und dann mit einem einfachen Decode nicht wieder richtig hergestellt.
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
107 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 26. Jun 2024, 13:59
Stimmt, mein Fehler, hab nicht ganz nach oben gescrollt im ersten Beitrag.
  Mit Zitat antworten Zitat
herik

Registriert seit: 17. Okt 2007
Ort: Spitzkunnersdorf / Sachsen
15 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Auslesen von Quelltext nach Scriptlauf mit EdgeBrowser

  Alt 27. Jun 2024, 04:36
Hallo shebang,

Zitat:
PS: Das Projekt Python4Delphi kennst du schon?
Ja, das Project kenne ich und nutze ich!. Kann ich nur Empfehlen!
Erik
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 18:44 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