Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Bestimmte Werte aus HTML Quelltext extrahieren (https://www.delphipraxis.net/117164-bestimmte-werte-aus-html-quelltext-extrahieren.html)

c.wuensch 13. Jul 2008 21:42

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Mal ne etwas andere Idee:
Muss es denn unbedingt aus dem Quelltext extrahiert werden? Wenn du das Ganze schon im TWebbrowser geöffnet hast, dann kannst du wunderbar über die HTML-DOM-Struktur auf die einzelnen Objekte des Dokuments zugreifen.

So kannst du z.B. ganz einfach den Titel der Webseite verändern (oder auslesen):
Delphi-Quellcode:
uses MSHTML;
var s: String;
...
s := IHtmlDocument2(Webbrowser1.Document).Title;
IHtmlDocument2(Webbrowser1.Document).Title := 'Neuer Titel';
Und für alle anderen Objekte und deren Attributwerte ist das ebenfalls möglich (hab mich damit mal länger beschäftigt, finde das aber im Moment nicht...)

toms 14. Jul 2008 06:25

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Hallo, folgender Code basiert auf marabus Code.
Musst natürlich den Code noch etwas umschreiben, da du ja die Daten nicht in ein Stringgrid übertragen möchtest.

Delphi-Quellcode:
uses MSHTML;

// IHTMLDocument2 eines Frames ermitteln
function GetFrameDoc(doc: IHTMLDocument2; v: OleVariant): IHTMLDocument2;
var
  win: IHTMLWindow2;
  u: IUnknown;
begin
  u := doc.frames.item(v);
  if Assigned(u)
  and Succeeded(u.QueryInterface(IHTMLWindow2, win))
    then Result := win.Document
    else Result := nil;
end;

// IHTMLTable nr. iTableNr eines IHTMLDocument2 ermitteln
function GetTable(doc: IHTMLDocument2; iTableNr: OleVariant; var t: IHTMLTable): Boolean;
var
  ec: IHTMLElementCollection;
  e2: IHTMLElement2;
begin
  Result := True;
  e2 := doc.body as IHTMLElement2;
  ec := e2.getElementsByTagName('table');
  if ec.length > 0 
    then t := ec.item(iTableNr, null) as IHTMLTable
    else REsult := False;
end;

// Zellen einer Zeile in ein Stringgrid übertragen
procedure GetCells(tr: IHTMLTableRow; sg: TStringGrid; index: Integer);
var
  i: Integer;
  ec: IHTMLElementCollection;
  e: IHTMLElement;
  s: TStrings;
begin
  s := sg.Rows[index];
  s.Clear;
  ec := tr.cells;
  if sg.ColCount < ec.Length then
    sg.ColCount := ec.length;
  for i := 0 to Pred(ec.length) do
  begin
    e := ec.item(i, null) as IHTMLElement;
    s.Add(e.innerText);
  end;
end;

// IHTMLTable in Stringgrid übertragen
procedure GetRows(t: IHTMLTable; sg: TStringGrid);
var
  i: Integer;
  ec: IHTMLElementCollection;
begin
  ec := t.rows;
  sg.RowCount := ec.length;
  for i := 0 to Pred(ec.length) do
    GetCells(ec.item(i, null) as IHTMLTableRow, sg, i);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 iDoc2 : IHTMLDocument2;
 itable: IHTMLTable;
 row: IHTMLTableRow;
 i: Integer;
begin
  if assigned(Webbrowser1.Document) then
  begin
    iDoc2 := Webbrowser1.Document as IHTMLDocument2;
    if Assigned(iDoc2) then
    begin
      iDoc2 := GetFrameDoc(iDoc2, 1); // IHTMLDocument2 von frame Nr. 1 ermitteln
      if Assigned(iDoc2) then
      begin
        if Assigned(iDoc2) then
        if GetTable(iDoc2, 0, itable) then // erste Tabelle
          begin
            GetRows(itable, Stringgrid1);
          end;
      end;
    end;
  end;
end;


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

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