So würde es mit dem
WebBrowser-Control gehen (ist halt viiiel einfacher als mit
Indy +
HTML parsen).
WebBrowser-Komponente auf's Formular klatschen und mit .Navigate()-Methode die Seite runterladen/anzeigen.
Dann hier erst einmal etwas Code zum auslesen von Links:
Delphi-Quellcode:
type
TOnExtractLink =
procedure(
const URL:
string)
of object;
procedure ExtractDocumentLinks(
const Document: IDispatch; callback:TOnExtractLink);
var
doc, links, link : OleVariant;
i : Integer;
begin
doc := Document;
links := doc.links;
for i:=0
to links.Length-1
do
begin
link := links.item(i);
callback(link.HREF);
end;
end;
procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink);
begin
if not Assigned(WebBrowser.Document)
then
Exit;
ExtractDocumentLinks(WebBrowser.Document, callback);
end;
Dann braucht man nur noch einen Handler für die Callback-Methode:
Delphi-Quellcode:
procedure TMainForm.AddLinkToList(
const url:
string);
var
url2 :
string;
pp : Integer;
ignore_anchors : Boolean;
begin
ignore_anchors := True;
// Sollen Anker in der URL unterdrückt werden?
if ignore_anchors
then
begin
pp := Pos('
#',
url);
if pp > 0
then
url2 := copy(
url, 1, pp-1)
else
url2 :=
url;
end
else
url2 :=
url;
if LbxLinkList.Items.IndexOf(url2) <> -1
then
Exit;
LbxLinkList.Items.Add(url2);
// URL in Listbox eintragen
end;
LbxLinkList.Clear;
ExtractWBLinks(WebBrowser1, AddLinkToList);