AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebbrowser Daten auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser Daten auslesen

Ein Thema von aaron · begonnen am 6. Mär 2008 · letzter Beitrag vom 18. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
aaron

Registriert seit: 18. Feb 2003
202 Beiträge
 
Delphi 2007 Professional
 
#1

TWebbrowser Daten auslesen

  Alt 6. Mär 2008, 09:27
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:
Wie bekomme ich die Werte zwischen den Hochkommas ausgelesen, zumal diese Struktur öfters in der HTML-Datei steht?
Wäre suupi wenn mir jemand dabei helfen könnte.

Aaron
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: TWebbrowser Daten auslesen

  Alt 6. Mär 2008, 14:30
Hallo Aaron,

hier hast du ein wenig Code zum Spielen:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
aaron

Registriert seit: 18. Feb 2003
202 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TWebbrowser Daten auslesen

  Alt 6. Mär 2008, 19:14
Hallo Marabu,

danke für dein Beispiel, magst du mir evtl. ein paar Kommentare dazuschreiben?
Insbesondere zu diesem Teil:

Delphi-Quellcode:
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;
Viele Grüße
Aaron
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: TWebbrowser Daten auslesen

  Alt 6. Mär 2008, 19:32
Hallo Aaron,

was genau an dieser Prozedur verstehst du nicht?

Die IHTML-Schnittstellen stammen aus der Unit MSHTML, dokumentiert sind sie in der MSHTML Referenz.

Freundliche Grüße
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TWebbrowser Daten auslesen

  Alt 7. Mär 2008, 01:16
Hier funktioniert es auch.
Hotte
  Mit Zitat antworten Zitat
aaron

Registriert seit: 18. Feb 2003
202 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TWebbrowser Daten auslesen

  Alt 11. Mär 2008, 09:17
Soweit klappt das hier nun auch.
Wenn ich aber eine ganze HTML-Datei auslesen will gibt es eine Fehlermeldung.
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EVariantTypeCastError aufgetreten. Meldung: 'Variante des Typs (Null) konnte nicht in Typ (String) konvertiert werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Liegt das an dieser Zeile?
  e := ec.item(i, null) as IHTMLElement; Wenn eine hanze HTML-Seite auslesen will dann ist e=nil

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
  Mit Zitat antworten Zitat
aaron

Registriert seit: 18. Feb 2003
202 Beiträge
 
Delphi 2007 Professional
 
#7

Re: TWebbrowser Daten auslesen

  Alt 13. Mär 2008, 01:29
Hallo marabu,
könntest du bitte nochmal nachsehen?
Gruss
Aaron
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: TWebbrowser Daten auslesen

  Alt 13. Mär 2008, 06:42
Moin Aaron,

der Fehler wird vermutlich durch ein fehlendes OnClick-Attribut verursacht. Du kannst das so umgehen:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
aaron

Registriert seit: 18. Feb 2003
202 Beiträge
 
Delphi 2007 Professional
 
#9

Re: TWebbrowser Daten auslesen

  Alt 14. Mär 2008, 01:05
Hallo marabu
nee, das klappt auch nicht.
Zitat:
---------------------------
Fehler
---------------------------
Es ist ein Laufzeitfehler aufgetreten.
Möchten Sie den Debugmodus starten?

Zeile: 69
Fehler: Objekt erwartet
---------------------------
Ja Nein
---------------------------
Freundliche Grüße
Aaron
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: TWebbrowser Daten auslesen

  Alt 14. Mär 2008, 07:16
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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