![]() |
TWebbrowser Daten auslesen
Ich muss Daten aus einer HTML-Datei auslesen die mehrfach in dieser Datei vorkommen und würde die Daten gerne über ein Stringgrid gleich nach Excel verfrachten, was das kleinere Problem darstellt.
Die Struktur der Daten liegen in folgendem Format vor: Zitat:
Wäre suupi wenn mir jemand dabei helfen könnte. Aaron |
Re: TWebbrowser Daten auslesen
Hallo Aaron,
hier hast du ein wenig Code zum Spielen:
Delphi-Quellcode:
Freundliche Grüße
uses
Mshtml; function CreateDocument(const markup: string): IHTMLDocument2; var doc: OleVariant; begin Result := CoHTMLDocument.Create as IHTMLDocument2; doc := Result; doc.Open; doc.Write(markup); doc.Close; end; procedure ShowIt(doc: IHTMLDocument2; s: TStrings); const MARKER = 'showit('; var i, iLeft, iRight: Integer; ec: IHTMLElementCollection; e: IHTMLElement; value: string; begin ec := doc.all.tags('a') as IHTMLElementCollection; for i := 0 to Pred(ec.length) do begin e := ec.item(i, null) as IHTMLElement; value := e.getAttribute('onclick', 0); iLeft := Pos(marker, Lowercase(value)) + Length(marker); iRight := LastDelimiter(')', value); if iLeft > Length(marker) then value := Copy(value, iLeft, iRight- iLeft) else value := ''; s.QuoteChar := ''''; s.DelimitedText := value; end; end; procedure TDemoForm.ButtonClick(Sender: TObject); var doc: IHTMLDocument2; markup: TStrings; begin markup := TStringList.Create; try markup.LoadFromFile(ParamStr(1)); // oder LoadFromStream doc := CreateDocument(markup.Text); ShowIt(doc, markup); ShowMessage(markup.Text); finally markup.Free; end; end; |
Re: TWebbrowser Daten auslesen
Hallo Marabu,
danke für dein Beispiel, magst du mir evtl. ein paar Kommentare dazuschreiben? Insbesondere zu diesem Teil:
Delphi-Quellcode:
Viele Grüße
procedure ShowIt(doc: IHTMLDocument2; s: TStrings);
const MARKER = 'showit('; var i, iLeft, iRight: Integer; ec: IHTMLElementCollection; e: IHTMLElement; value: string; begin ec := doc.all.tags('a') as IHTMLElementCollection; for i := 0 to Pred(ec.length) do begin e := ec.item(i, null) as IHTMLElement; value := e.getAttribute('onclick', 0); iLeft := Pos(marker, Lowercase(value)) + Length(marker); iRight := LastDelimiter(')', value); if iLeft > Length(marker) then value := Copy(value, iLeft, iRight- iLeft) else value := ''; s.QuoteChar := ''''; s.DelimitedText := value; end; end; Aaron |
Re: TWebbrowser Daten auslesen
Hallo Aaron,
was genau an dieser Prozedur verstehst du nicht? Die IHTML-Schnittstellen stammen aus der Unit MSHTML, dokumentiert sind sie in der ![]() Freundliche Grüße |
Re: TWebbrowser Daten auslesen
Hier funktioniert es auch.
|
Re: TWebbrowser Daten auslesen
Soweit klappt das hier nun auch.
Wenn ich aber eine ganze HTML-Datei auslesen will gibt es eine Fehlermeldung. Zitat:
Delphi-Quellcode:
Wenn eine hanze HTML-Seite auslesen will dann ist e=nil
e := ec.item(i, null) as IHTMLElement;
Und nochwas- Wenn ich nur die Daten ohne Html in einer Datei stehen habe wird immer nur der letzte Datensatz der Datei angezeigt. Gruß Aaron |
Re: TWebbrowser Daten auslesen
Hallo marabu,
könntest du bitte nochmal nachsehen? Gruss Aaron |
Re: TWebbrowser Daten auslesen
Moin Aaron,
der Fehler wird vermutlich durch ein fehlendes OnClick-Attribut verursacht. Du kannst das so umgehen:
Delphi-Quellcode:
Freundliche Grüße
procedure ShowIt(doc: IHTMLDocument2; s: TStrings);
const MARKER = 'showit('; var i, iLeft, iRight: Integer; ec: IHTMLElementCollection; e: IHTMLElement; value: string; begin ec := doc.all.tags('a') as IHTMLElementCollection; for i := 0 to Pred(ec.length) do begin e := ec.item(i, null) as IHTMLElement; value := VarToStr(e.getAttribute('onclick', 0)); // deal with null value if value = '' then Continue; // skip when JS missing iLeft := Pos(marker, Lowercase(value)) + Length(marker); iRight := LastDelimiter(')', value); if iLeft > Length(marker) then value := Copy(value, iLeft, iRight- iLeft) else value := ''; s.QuoteChar := ''''; s.DelimitedText := value; end; end; |
Re: TWebbrowser Daten auslesen
Hallo marabu
nee, das klappt auch nicht. Zitat:
Aaron |
Re: TWebbrowser Daten auslesen
Moin Aaron,
wenn du mir ein Testdokument gibst, dann kann ich dir weiterhelfen. Momentan weiß ich weder wie dein HTML-Dokument noch wie dein Quelltext aussieht - geschweige denn, was du in Zeile 69 machst. Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz