Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi (angezeigten) Text einer HTML-Quelle ermitteln (https://www.delphipraxis.net/50741-angezeigten-text-einer-html-quelle-ermitteln.html)

Olli 30. Jul 2005 22:54

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Zitat:

Zitat von marabu
Olli, dass mit dem faulty memory recall wird immer schlimmer - nicht nur bei dir. Ich dachte früher, ich werde alt, aber heute weiß ich woran es liegt: information overload! Die armen Synapsen...

Danke für die tröstenden Worte. :mrgreen:

<Ausrede>IDocHostUIHandler hängt ja irgendwie mit IWebBrowser2 zusammen :zwinker:</Ausrede>

Panthrax 30. Jul 2005 23:22

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Salut ihr beiden.

Ich habe folgendes probiert:
  • eine Test-Ausgabe direkt nach WebBrowser1.Navigate(...) eingefügt, und
  • eine Test-Ausgabe mti WebBrowser1.OnDocumentComplete eingefügt

@marabu:

Ergebnis: Richtig vermutet! Direkt nach dem Navigate ist es zufrüh nach dem WebBrowser1.Document zu fragen.

Ich habe deshalb erst bei OnDocumentComplete mit Document gearbeitet. Funktioniert prima! Ich kann auf Doc.title, Doc.body.innerText,... zugreifen. Danke! :thumb: Un das mit dem mehrfachen Auslösen bei mehreren Frames ist auch gut. Das Verhalten kommt mir entgegen.

Schade für mich: innerText gibt nicht den Text zurück, den ich mir erhofft hatte. :| Es sind noch alle HTML-Tags enthalten. Scheint also so, als müsste ich die HTML-Tags doch noch selbst entfernen; entweder durch reguläre Ausdrücke oder durch den Dokumentbaum hangeln.

Wo wir schon fast dabei sind: Gibt es eine Komponente die durch HTML-Tags eines Dokuments iteriert? Oder kann man sich bei TWebBrowser beim erstellen des Dokuments einklinken, so dass man die Tags mitbekommt?

@Olli:

Jeder kann sich mal irren... Auf jeden Fall: Danke für die Hilfe! :thumb: Auf reguläre Ausdrücke werde ich ganz bestmmt noch einmal zurückkommen. Ich kenne sie aus PHP und finde sie sehr bequem. Habe ich in Delphi vermisst als ich sie kennengelernt habe.

MfG
Panthrax

yankee 30. Jul 2005 23:22

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Neunis Lösung ist doch super. Was habt ihr denn daran auszusetzen? Einfach erstmal die Zeilenumbrüche (#13#10 erstzen durch '' und danach <br*> ersetzen durch #13#10) dann ein stringgreplace, welches Wildcards kann und dann '<*>' durch '' ersetzen und dann noch die htmlspecialchars und schon perfekt.

St.Pauli 31. Jul 2005 02:10

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Den Link hab ich im I-Net gefunden. Kannste dir ja mal anschauen und entsprechend verändern. Link

MfG, St.Pauli

marabu 31. Jul 2005 08:26

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Hallo Panthrax,

Zitat:

Zitat von Panthrax
Schade für mich: innerText gibt nicht den Text zurück, den ich mir erhofft hatte. Es sind noch alle HTML-Tags enthalten.

hast du vielleicht versehentlich innerHTML verwendet? innerText enthält definitiv keine tags mehr. Erwähnenswert ist noch, dass bei Verwendung von innerText Texte aus Elementen mit div Charakter durch cr/lf getrennt werden, Texte aus Elementen mit span Charakter werden ohne Separator geliefert. So kann es passieren, dass per CSS räumlich getrennte Texte verkettet werden. Das ist kein Fehler, sondern ein semantisches Problem.

Bei komplexen Dokumenten verwende ich gelegentlich den von dir erwähnten iterativen / rekursiven Ansatz über die property children. Auch das ist keine Universallösung.

marabu

Chewie 31. Jul 2005 15:04

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Wenn du wohlgeformtes XHTML verwendest, kannst du einen XML-Parser nehmen und beispielsweise via XPATH alle Elemente, die Text enthalten, ermitteln und deren Text extrahieren.

Panthrax 31. Jul 2005 19:29

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
@marabu:

Ui. Es war gestern wahrscheinlich doch schon etwas spät... Hatte wirklich innerHTML, und nicht innerText verwendet. :oops: Ich habe es korrigiert - und auch kein HTML mehr. :angel2: Danke.

Was ich noch nicht gefunden habe ist der Hinweis auf die CSS-Datei bzw. die verwendeten StyleSheets. In dem Zusammenhang interessiert mich auch woher bekomme ich die Standardeinstellungen der Elementdarstellungen? Denn mit CSS werden diese Darstellungen ja modifiziert.

Da MSHTML nicht in der Hilfe Dokumentiert ist (Ich finde jedenfalls keinen Hilfeeintrag dazu; bleibt wohl nur die MS-Webseite als Referenz.), habe ich mir TXMLDocument noch einmal genauer angesehen. Also es ist ja schon nicht schlecht mit IXMLNode durch die einzelnen Elemente navigieren zu können, und ihre Attribute und Inhalte lesen zu können. Aber mit TXMLDocument funktioniert das ja nur, wenn das Dokument wohlgeformt ist.

@Chewie:
Danke für den Hinweis, aber was ist XPath? :gruebel: Hab mich mal in der Komponentenpalette umgeschaut. Aber irgendwie findet sich dort kein Parser oder eine Komponente die man dazu misbrauchen könnte. Hat jemand empfehlungen?

Wo wir schon dabei sind: gibt es auch Parser für CSS-Dateien?

Gruß
Panthrax

Chewie 31. Jul 2005 19:54

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
XPath: http://www.w3schools.com/xpath/default.asp

Es ist im Wesentlichen eine Sprache zum Adressieren von Knoten eines XML-Dokumentes.

Und als Parser könntest du z.B. MSXML einsetzen.

Panthrax 31. Jul 2005 20:21

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
XPath hab ich verstanden. Für die Mitlesenden: Ich habe meine Informationen im wesentlichen hier gefunden: XPath Syntax im XPath Tutorial. Danke Chewie.

Als ich Parser meinte, hatte ich eher an eine Komponente gedacht, die man mit einem Parser wie "MSXML" verwendet (etwa wie bei TXMLDocument). Also eine Komponente, die, wenn sie auf ein Tag trifft ein Ereignis auslöst, bei dem ich mich einklinken kann. Etwa so wie dies bei TPageProducer der falls ist: Parst eine Vorlage um die Ausgabe zu generieren und löst ein Ereignis OnHTMLTag aus. Gibt es soetwas auch für zu parsende HTML/XML-Dateien?

Panthrax

marabu 31. Jul 2005 20:57

Re: (angezeigten) Text einer HTML-Quelle ermitteln
 
Hallo Panthrax,

es gibt zwei grundverschiedene Ansätze für das Parsen von XML (und auch generell). Beim einen (IXMLDOMDocument) baut der Parser eine in-memory Struktur auf, die das untersuchte Dokument repräsentiert, beim anderen (ISAXXMLReader) werden Ereignisse ausgelöst, auf die du reagieren kannst.

Du solltest dir den Microsoft Platform SDK besorgen, der all diese Systemkomponenten dokumentiert. Auch Tutorials und sample code ist dabei. Unverzichtbar.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Seite 2 von 3     12 3      

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