Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!) (https://www.delphipraxis.net/196711-text-aus-geladener-webseite-aus-twebbrowser-memo-nicht-quelltext.html)

markusagb 11. Jun 2018 15:52

Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Hallo zusammen,

leider finde ich im Forum dazu keinen Eintrag, nur wie man den Quelltext aus TWebbrowser in ein Memo bekommt - das funktioniert.
Leider wird die Information die ich benötige im Quelltext nicht angezeigt, wohl aber im Webbrowser-Fenster.

Ich müsste also erst einmal in diesem Webbrowser Fenster die Textpassage finden (Anfang Text beginnt mit "Wetter" und ende Text beginnt mit "Morgen", das dazwischen benötige ich).
Wenn diese Textpassage gefunden wurde im Webbrowser (nicht Quelltext), dann müsste ich diese in ein Memo kopieren.

Habe schon viel ausprobiert, ich lande immer wieder beim Quelltext... der mir nichts bringt.

Könnte mir jemand helfen?

Danke schon mal!!

Markus

himitsu 11. Jun 2018 16:08

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Den offiziellen Weg gehen, denn das Parsen fremder Webseiten ist womöglich garnicht erlaubt.

Viele Webseiten bieten Schnittstellen z.B. via SOAP oder REST an, wo im XML oder JSON dann alles in einem definierten Format zu finden ist.


Beispiel: https://www.delphipraxis.net/externa...S2&forumids=40

markusagb 11. Jun 2018 16:13

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Danke für die schnelle Nachricht! Müsste ich zwar nicht schreiben, aber die Wetterdaten bekommen wir derzeit immer per Mail - sehr umständlich, deshalb wollen wir diese ja auslesen. Erlaubnis habe ich dazu.

Markus

Ps: Dein Link funktioniert leider nicht

freimatz 11. Jun 2018 17:12

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Irgendwie verstehe ich nur Bahnhof. Wie kann ein WebBrowser etwas anzeigen das nicht im Quelltext steht? Ist das nicht der HTML-Quelltext? Woher soll dann die Anzeige kommen? Oder wird das etwas dynamisch nachgeladen? Dann kann es wohl kaum in einer Mail stehen.

markusagb 11. Jun 2018 17:21

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Lustig, Fragen auf ne Frage zu bekommen...

Der Quelltext beinhaltet nicht die Information die im TWebbrowser angezeigt wird, evtl. dynamische Daten die geladen werden. Deshalb ja das Auslesen aus dem angezeigten Text.

Es geht um den Inhalt der Seite den wir automatisiert auslesen und in unser System einlesen wollen, derzeit bekommen wir das von unserem Anbieter per Mail das wir manuell einpflegen müssen. Leider hat unser Anbieter keine Api und auch sonst keine Ahnung...

Danke an alle die konstruktive Beiträge posten, ich denke ich habe es verständlich ausgedrückt. Profis dürften verstehen was ich benötige.

HolgerX 11. Jun 2018 18:12

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Hmm...

Text aus Webbrowser...

https://www.delphipraxis.net/3547-te...-auslesen.html

Klappt dass nicht?

markusagb 11. Jun 2018 18:15

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Hallo lieber Holger,
das hatte ich als erstes versucht, aber da steht es auch nicht drin
"aText := Browser.OleObject.Document.Body.InnerText"
Ich glaube diese Funktion baut nur den Quellcode um...
Scheint schwieriger zu werden als gedacht...

Delphi.Narium 11. Jun 2018 18:58

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Zwischenablage nutzen, ungetestet ungefähr sowas:
Delphi-Quellcode:
procedure WebbrowserTextKopieren(Sender: TObject);
Var
  i : Integer;
begin
  Webbrowser.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_DODEFAULT);
  Webbrowser.ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT);
  Webbrowser.ExecWB(OLECMDID_CLEARSELECTION,OLECMDEXECOPT_DODEFAULT);
  Memo.PasteFromClipboard;
  // Hier dann im Memo die tatsächlich benötigte Textpassage
  // zwischen Wetter und Morgen suchen.
  i := Pos('Wetter',Memo.Text);
  if i > 0 then Memo.Text := Copy(Memo.Text,i + 6,Length(Memo.Text));
  i := Pos('Morgen',Memo.Text);
  if i > 0 then Memo.Text := Copy(Memo.Text,1,i - 1);
end;

markusagb 11. Jun 2018 19:07

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Danke, das sieht gut aus, ich teste es gleich mal!
Super!! :-)

markusagb 11. Jun 2018 19:14

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Also, selbst damit müsste er ja "alles" ins clipboard holen, tut er aber nicht:

Webbrowser6.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOP T_DODEFAULT);
Webbrowser6.ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DOD EFAULT);
Webbrowser6.ExecWB(OLECMDID_CLEARSELECTION,OLECMDE XECOPT_DODEFAULT);
Memo1.PasteFromClipboard;



Ich habe dann ergänzt:

initialization
OleInitialize(nil);

finalization
OleUninitialize;


Kann manuell aus dem clipboard raus kopieren, aber nicht mit dem code :-(

Habe nun dem Webbrowser den Fokus gegeben mit Webbrowser6.OleObject.Document.body.focus aber das Memo ist leer mit ca. 20 Zeilen...

DeddyH 11. Jun 2018 19:27

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Wie sieht es denn aus, wenn Du die Seite „ganz normal“ in Deinem Standardbrowser aufrufst und Dir den Seitenquelltext anzeigen lässt?

Monday 11. Jun 2018 20:35

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Ich vermute, das der gesuchte Text über ein JavaScript (aus externer Datei eingebunden) ausgegeben wird, oder sogar über Flash. Dann bekommst du den Text nämlich nicht so einfach über den Quelltext.

Bei JavaScript müsstest du die Datei suchen und ggf. ausseinanderpflügen. Irgendwo hast du was von "innerhtml" geschrieben, könnte ein Indiz sein. Vielleicht kannst du die Seite über einen normalen Browser Downloaden mit den dazugehörigen Dateien, und dann in den Dateien die gesuchte Information suchen.
Bei Flash (oder ggf. sogar Grafiken?), ist es gar nicht möglich, oder nur sehr schwer möglich.

(Manche Webseiten leiten dich auch auf andere Inhalte um, wenn sie denken, dass du eine Suchmaschine oder irgendein komischer Bot bist. Vielleicht ist das auch der Fall?!)

KodeZwerg 11. Jun 2018 21:06

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Wenn Deine Information nur im TBrowser sichtbar ist, könnte ein workaround per Screenreader Dich zum Ziel führen.

Delphi.Narium 11. Jun 2018 21:15

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Wenn das Memo nachher Leerzeilen enthält, dann funktioniert PasteFromClipboard. Eventuell werden die von Dir benötigten Informationen nicht als Text dargestellt, sondern als Grafiken eingebunden.

Mach' bitte vor das PasteFromClipboard noch ein Memo.Lines.Clear, um sicherzustellen, dass es vorher leer ist. Bekommst Du nun auch Leerzeilen?

Könntest Du eventuell bitte mal 'nen Screenshot vom Webbrowser hier einstellen, der die Anzeige vor der "Kopieraktion" enthält?

Eventuell kann man da was erkennen und weiterführende Vorschläge entwickeln.

Markiere mal im Webbrowser den ganzen Text mit STRG+A. Werden die von Dir benötigten Informationen dabei mitmarkiert?

TiGü 12. Jun 2018 07:39

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Um welchen Wetterdienst handelt es sich denn?

KodeZwerg 12. Jun 2018 07:50

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Wetter Homepage Widget, vielleicht kannst Du damit einfacher Deinen Text erhalten?

Jasocul 12. Jun 2018 10:05

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Zitat:

Zitat von TiGü (Beitrag 1404599)
Um welchen Wetterdienst handelt es sich denn?

Das wüsste ich auch gerne.
Ich habe einen kleinen Test gemacht.
bei wetter.de funktioniert es mit
Delphi-Quellcode:
memo1.Text := WebBrowser1.OleObject.Document.Body.InnerText;
bei mir problemlos.

markusagb 12. Jun 2018 15:35

AW: Text aus geladener Webseite aus TWebbrowser in Memo (nicht Quelltext!)
 
Danke Euch allen, es klappt jetzt über Umwege. Tatsächlich sind die Daten über JavaScript eingebunden, Delphi.Narium hat mich drauf gebracht. Also erst mal alles laden und dann suchen - und es funktioniert. Vielen Dank an alle!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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