Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Tabelle mit TWebbrowser auslesen (https://www.delphipraxis.net/133818-tabelle-mit-twebbrowser-auslesen.html)

Onkelrossie 9. Mai 2009 19:49


Tabelle mit TWebbrowser auslesen
 
Hallo und guten Abend Ihr Lieben,

ich habe mal wieder ein Problem wo ich mit Lesen alleine nicht weiter komme.
Ich Suche nun schon seit mehreren Tagen über Google und die Forumsuche aber
alles was ich bisher finden konnte, half mir nicht wirklich weiter.

Ich versuche mit dem TWebbrowser eine Tabelle mit Kundendaten die bei uns im Intranet
zu finden ist, auzulesen und in ein Record zu speichern.
Mit Records bin ich sehr vertraut das ist nicht mein Problem.
Ich komme nur nicht an die Daten der Tabelle sprich ich weiß nicht wie ich diese
auslesen soll.

Erstmal hier ein auszug aus der Tabelle damit Ihr den aufbau mal sehen könnt:

Delphi-Quellcode:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-AU">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta name="author" content="fullahead.org" />
  <meta name="keywords" content="reflection, fullahead, pat, OSWD, more, keywords, separated, with, commas" />
  <meta name="description" content="OSWD reflection XHTML template by fullahead.org" />
 
  <title>Kundendaten</title>

  <link rel="stylesheet" type="text/css" href="screen_yellow.css" media="screen, tv, projection" />
</head>

<body>
...
!weiterer HTML und Javascript Code!
...
<table width="82%" border="1" align="center" cellpadding="0" cellspacing="0" class="norm">
  <tr>
    <td >[url="index.php?p=list&Data=1&order=name&wie=asc"]Name[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=vorname&wie=asc"]Vorname[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=strasse&wie=asc"]Strasse[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=hausnummer&wie=asc"]Hausnummer[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=plz&wie=asc"]PLZ[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=ort&wie=asc"]Ort[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=land&wie=asc"]Land[/url]</td>
    <td >[url="index.php?p=list&Data=1&order=telefon&wie=asc"]Telefon[/url]</td>   
  </tr>
 
  <tr>
    <td>Mustermann</td>
    <td>Max</td>
    <td>Musterstrasse</td>
    <td>1</td>   
    <td>00001</td>
    <td>Musterhausen</td>
    <td>Deutschland</td>
    <td>0123/4567890</td>
  </tr>
 
  <tr>
    <td>Müller</td>
    <td>Monika</td>
    <td>Müllerring</td>
    <td>9</td>   
    <td>00002</td>
    <td>Müllerhausen</td>
    <td>Deutschland</td>
    <td>3210/0987654</td>
  </tr>
</table>
...
!weiterer HTML und Javascript Code!
...
</body>
</html>
Wie Ihr sehen könnt hat die Tabelle keinen eindeutigen Namen.
Es ist auch nur eine Tabelle auf der gesammten Seite vorhanden.
Irgendwie muss es doch möglich sein an die Daten ran zu kommen?

Ich habe es schon mit den Tipps von hier und hier versucht aber das setzt immer voraus das man den Namen der Tabelle kennt.

Versuche ich das ganze mit idHTTP oder als XML zu Parsen ->
Zitat:

Zitat von marabu
Hallo Hoschie,

an den XML-Source des WebBrowsers kommst du per late binding:
Delphi-Quellcode:
var
  ws: WideString;
  doc: OleVariant;
begin
  doc := WebBrowser.Document;
  ws := doc.XMLDocument.XML;
  ShowMessage(ws);
end;
Freundliche Grüße

bekomme ich immer den Fehler: Method 'XMLDocument' not supported by automation object.

Bisher kam ich immer gut zurecht mit folgendem Code den ich auch gut verstehe:
Delphi-Quellcode:
Webbrowser1.OleObject.Document.Forms.Item('form1').Elements.Item(0).Value := Edit1.Text;
Damit kann ich die Seite wie eine XML-Datei (Baumkonstrukt) auslesen.
Das hat immer geklappt bis auf das auslesen von Tabellen.

Wie müsste ich im Optimalfall den Code verändern damit er auch bei Tabellen geht?
Oder muss ich hier auf eine ganz andere Methode zurück greifen?

Am liebsten wäre es mir wie gesagt die Tabelle direkt mit dem Webbrowser
auszulesen bzw. zu parsen. Das muss doch irgendwie gehen. Eine Combobox kann ich ja auch
ohne weiteres mit einer For-Schleife und dem o.g. Code (etwas abgewandelt) auslesen.

Ich habe schon so viel versucht und bin mit meinem Latain am Ende.
Bin euch für jede weitere Hilfe dankbar!

Vielen Dank schonmal im Voraus!


Mit freundlichen Grüßen
Wolfgang

toms 9. Mai 2009 20:20

Re: Tabelle mit TWebbrowser auslesen
 
Hallo

Ansatz ohne Verwendung von TWebbrowser, mit IdHttp und Ermittlung von
IHTMLDocument2:

Delphi-Quellcode:
function GetDocument(const markup: WideString): IDispatch;
var
  doc: OleVariant;
begin
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  doc.Write(markup);
  doc.Close;
end;

var
  docd: IDispatch;
  doc: IHTMLDOCUMENT2;
  url: String;
  itable: IHTMLTable;
begin
  url := 'http://www.DeineURL.xyz';
  doc := GetDocument(IdHttp1.Get(url)) as IHTMLDocument2;
  GetTable(Doc, 0, itable) // siehe Link unten
  etc..
end;

Die Tabelle kannst du dann wie hier gezeigt wird parsen.

Lannes 9. Mai 2009 22:19

Re: Tabelle mit TWebbrowser auslesen
 
Hallo,

Zitat:

Zitat von Onkelrossie
... Am liebsten wäre es mir wie gesagt die Tabelle direkt mit dem Webbrowser
auszulesen bzw. zu parsen.

dort Link ein Ansatz direkt mit dem WebBrowser.

Onkelrossie 10. Mai 2009 12:20

Re: Tabelle mit TWebbrowser auslesen
 
Vielen Dank für eure Antworten!
Habe mich für die Lösung von Lannes entschieden und komme sehr gut damit zurecht.


MfG
Wolfgang

Wunni 10. Mai 2009 14:25

Re: Tabelle mit TWebbrowser auslesen
 
ich finde die hier auch ganz gut:

http://www.yunqa.de/delphi/doku.php/...parser/plugins

...
The Table plugin keeps tracks of HTML tables encountered during the parsing. Other parsing processes can query the Table plugin about the table cell and column and the table nesting.


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