Autor Beitrag
sky21
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: Mo 21.09.09 09:39 
Hi all

Kennt jemand eine freeware Komponente, welche aus einer HTML Seite die Links auflistet? Irgendwie so ähnlich wie:

function GetLinkElements(InputHtmlSite : String; out Links : TStringlist) : boolean;

IIdHttp und TWebbrowser scheinen das noch nicht zu können. Da muss es doch schon einen HTML Parser geben; irgendwo, oder?

Danke für eure Hinweise!!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 21.09.09 09:50 
Wie wäre es mit einem Blick in die Dokumentation zu TWebBrowser? Da gibts direkt eine Liste der Anchor-Tags.
msdn.microsoft.com/e...ibrary/aa752583.aspx

Bei IdHttp musst du das selbst parsen bzw. einen der vielen fertigen Parser verwenden.
sky21 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: Mo 21.09.09 10:25 
Hallo Jaenicke

Den TWebbrowser habe ich mir natürlich auch angeschaut. Aber ich habe "anchor" nicht als "Link" interpretiert. Verwende ich diese englische Bezeichnung, dann wirft mir auch Google wieder allerlei Interessantes zu diesem Thema! Hey, danke vielmals! Ich backe mir jetzt gleich mal ein Tool mit TWebbrowser....


PS: Jetzt verstehe ich auch, was das "a" im <a>Link</a> Tag bedeutet. Herrlich, wenn plötzlich alles doch einen Sinn gibt.


Zuletzt bearbeitet von sky21 am Mo 21.09.09 11:13, insgesamt 1-mal bearbeitet
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 21.09.09 10:28 
Performanter wirds aber sein wenn du die Seite mit IdHTTP herunterlädst und dann mit Copy, Pos und PosEx parst. Ist auch nicht wirklich viel Aufwand wenn es nur um die Links geht.
sky21 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: Mo 21.09.09 12:08 
Hallo... ich schon wieder...

Also das TWebbroswer -> 'Anchors' Property scheint zumindest in meinem Fall nicht zu funktionieren. Verwende ich hingegen den allgemeineren Code, dann funktioniert es.


ausblenden Delphi-Quelltext
1:
2:
// geht nicht (count = 0)
count  := FMyWebbrowserObj.OleObject.Document.Anchors.Length;


ausblenden Delphi-Quelltext
1:
2:
// geht (count = Anzahl Links)
count  := FMyWebbrowserObj.OleObject.Document.All.Tags('A').Length;


Andere scheinen auch denselben Code zu verwenden. z.B. hier: www.delphipraxis.net/post667850.html

So, nochmals ein Blick in die Dokumentation und dort steht dann, dass die Collection nur Anchors mit einem ID und/oder Namen zurück gibt. Aha, meine Beispielseite hat allerdings nur abgespeckte Links (<a href="bla.html">Link</a>). Daher kann hier die Anchors-Collection offenbar nicht verwendet werden. Insofern für mich eine Enttäuschung, aber jetzt mache ich es halt mit dem allgemeinen Zugriff ....

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
Performanter wirds aber sein wenn du die Seite mit IdHTTP herunterlädst und dann mit Copy, Pos und PosEx parst. Ist auch nicht wirklich viel Aufwand wenn es nur um die Links geht.


Den Aufwand mit TIdHttp ist aber auch nicht zu unterschätzen. Was wäre z.B. bei einer komplexen Frame-Site? Hier müsste mein Tool dann wiederum alle html Seiten einzeln GET'en. Das ist zwar möglich, aber fodert wieder Programmieraufwand auf meiner Seite.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 21.09.09 13:10 
Hallo,

mit WebBrowser.OleObject.Document.Links bekommst Du Zugriff auf ein Array das alle Links einer HTML-Seite enthält.
Alle Frames und Iframes durchforsten kannst Du, indem Du den (Link) rekursiven Code entsprechend anpasst.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )