Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi HTML Tabelle auslesen (getElementById) (https://www.delphipraxis.net/117020-html-tabelle-auslesen-getelementbyid.html)

API 10. Jul 2008 05:43


HTML Tabelle auslesen (getElementById)
 
Moin,

Ich probiere eine HTML Tabelle mittels getElementsByTagName auszulesen.
(Möchte es nicht via IHTMLTable machee)

Bei Zeile 5 erscheint eine Fehlermeldung "Invalid Argument". Warum?


Delphi-Quellcode:
 document := Webbrowser1.Document as IHTMLDocument3;
 tableBody := document.getElementById('table10');
 trs := tableBody.getElementsByTagName('tr');
 for i := 1 to trs.length -1 do
 begin
   tds := trs[i].getElementsByTagName('td'); // <--- "Invalid Argument"
   for j := 0 to tds.length - 1 do
   begin
      Inputs := tds[j].getElementsByTagName('input');
      for k := 0 to Inputs.length -1 do
      begin
        memo1.Lines.add(Inputs[k].value);
      end;
   end;
 end;
Variablen:
Delphi-Quellcode:
var
   tableBody, trs, tds, Inputs : OleVariant;
   document: IHTMLDocument3;
   i,j,k: Word;
Der JS-Code (gekürzt) funktioniert jedoch:
Code:
 tableBody = document.getElementById('table10');
 var trs = tableBody.getElementsByTagName("tr");
for (var i = 0; i < trs.length ; i++)
{   
var tds = trs[i].getElementsByTagName("td");   
}

API 11. Jul 2008 14:16

Re: HTML Tabelle auslesen (getElementById)
 
*PUSH*

marabu 11. Jul 2008 16:29

Re: HTML Tabelle auslesen (getElementById)
 
Holla,

warum mischst du early (IHTMLDocument3) und late binding? Außerdem sind die Zugriffe bei JS etwas anders als bei Automation mit Object Pascal. Probiere es mal so:

Delphi-Quellcode:
var
   tableBody, trs, tds, Inputs : OleVariant;
   i,j,k: Integer; // besser ist das!
begin
  tableBody := Webbrowser1.OleObject.document.getElementById('table10');
  trs := tableBody.getElementsByTagName('tr');
  for i := 1 to trs.length - 1 do
  begin
    tds := trs.item(i, null).getElementsByTagName('td');
    for j := 0 to tds.length - 1 do
    begin
      Inputs := tds.item(j, null).getElementsByTagName('input');
      for k := 0 to Inputs.length - 1 do
        memo1.Lines.add(Inputs.item(k, null).value);
    end;
  end;
end;
Getippt und nicht getestet.

Du erkennst die Unterschiede? Deine Laufvariablen sollten übrigens Integers sein, sonst funktioniert dein Endekriterium bei leeren Collections nicht.

Grüße vom marabu


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