![]() |
TWEbbrowser : String im Dokument suchen
hi leute.
Ich möchte gerne in einem Dokument des TWebbrowsers nach einem bestimmte String suchen. Ich habe daszu folgendes geschrieben:
Delphi-Quellcode:
code : TMemo;
code.Text := browser.OleObject.Document.body.OuterHTML;
RegCheck.Expression := '([_a-zA-Z\d\-\.]{5,10})'; if RegCheck.Exec(code.Text) then begin logbook.Log(ltStep,'Ergebniss enthalten'); end else logbook.Log(ltError,'Ergebniss nicht enthalten'); logbook.Log(ltStep,code.Lines.Text); logbook : TStringLogger; log : TMemo; RegCheck : TRegExpr; um die Komponenten TStringlistLogger und TRegExpr brauchen wir uns nicht kümmern, der Logger schrreibt eben nur eine Zeile in ein Memo-Objekt und TRegExpr ist eine Komponente um reguläre Ausdrücke zu überprüfen. Das Problem ist jetzt, dass anscheinend irgendwas mitcode nicht stimmt, da das ergebniss der Überprüfung immer negativ ausfällt; wenn ich aber den html-code in das Memo-Objekt log packe dann funktioniert alles. Der unterschied zwischen den beiden dass das Memo-Objekt log auf der Form ist und ich das Memo-Objekt code einfach in die private deklaration geschrieben habe: code : TMemo; ist das nicht möglich ??? Ausserdem gibt es immer einen Fehler beim ausführen des Programms bei dieser Zeile:
Delphi-Quellcode:
liegt das an dem Memo-feld ???
logbook.Log(ltStep,code.Lines.Text);
Wer kann helfen das Problem zu lösen ?? |
Re: TWEbbrowser : String im Dokument suchen
Zitat:
Zum suchen: hast Du vielleicht "Code" gar nicht instanziert? Dann dürfte zwar schon die Zuweisung nicht funktionieren, aber ab und zu klappt sowas mal, man kann aber dennoch nicht drauf zu greifen. Das würde auch erklären, warum Du beim Zugriff auf code.Lines.Text unten einen fehler bekommst. Edit: PS: Ein wenig mehr info von wegen WAS für ein Fehler kommt wäre nicht schlecht ;-) |
Re: TWEbbrowser : String im Dokument suchen
was meinst du mit instanziert ???
in der prvat-deklaration der form steht halt code : TMemo; und dann greife ich darauf zu ( code.text := browser... ) Fehler ist dieser Hier: ... EAcessVialation ... Zugriffsverletzung bei Adresse 0064224A in Modul browser.exe LEsen von ADresse 0000... Prozess wird angehalten. sowas halt. Hatte sowas einen Fehler schonmal als ein Objekt freigegeben werden sollte das nicht da war. hat das was damit zu tun ? |
Re: TWEbbrowser : String im Dokument suchen
Zitat:
Delphi-Quellcode:
Probier mal folgendes:
code: TMemo; // deklariert eine Variable vom Typ TMemo
// das TMemo gibt es aber noch nicht, es hat nur schon Platz wenn es kommt
Delphi-Quellcode:
code := TMemo.Create(self); // Objekt erzeugen
code.Text := browser.OleObject.Document.body.OuterHTML; // danach drauf arbeiten // hier dann weitermachen //... // // und am Ende nicht vergessen: FreeAndNil(code); // speicher wieder freigeben Edit: PS: Brauchst Du überhaupt für den Code ein TMemo, wenn Du eh nichts anzeigen willst, oder brauchst Du nur ein Objekt, das Dir nur den Text bzw. html-Quellcode vorhält? In letzterem Fall würde ich das TMemo gegen ein TStrings austauschen, denn: TMemo.Lines ist ein TSTrings, d.H. wenn Du bei Code eh immer ausschliesslich nur auf Lines arbeitest wäre es geschickte, gleich ein TStrings - Objekt zu nehmen. |
Re: TWEbbrowser : String im Dokument suchen
mit TStrings hab ich das auch schon probiert nur es kommt der gleiche Fehler
nur mit ner anderen adresse versteht sich |
Re: TWEbbrowser : String im Dokument suchen
Auch bei einem TStrings gilt:
auf jeden Fall vorher ein
Delphi-Quellcode:
aufrufen.
code := TStrings.Create(self);
Ohne Create kein Objekt. Deine Variable 'code' ist am Anfang nur eine Speicheradresse, und die ist am Anfang noch leer bzw. hat einen zufälligen Wert. Willst Du nun auf code.irgendwas zugreifen, wird geguckt, auf welches Objekt 'code' denn nun zeigt, springt an die Adresse und holt Dir das .irgendwas her. An der zufälligen Speicheradresse gibt es aber nocht kein TStrings und erst recht kein .irgendwas da drauf. Erst wenn Du ein TStrings.Create() aufrufst, wird das Objekt (und sein .irgendwas) angelegt, und in Deine Variable 'code' wird reingeschrieben, WO denn nun das Objekt liegt. Erst danach kannst Du überhaupt auf Deinem 'code' arbeiten, egal ob das nun ein TMemo oder ein TStrings ist. |
Re: TWEbbrowser : String im Dokument suchen
hatte ich auch schon ausprobiert und habs jetzt halt nochmal gemacht:
eAbstractError ... 'Abstrakter Fehler' der Prozess wurde angehalten !!! Das dingen dient ja nur dazu den html code nicht-visuell festzuhalten um ihn mit den regulären ausdrücken zu vergleichen ! |
Re: TWEbbrowser : String im Dokument suchen
Hallo Phoenix,
bei TStrings handelt es sich um eine abstrakte Basisklasse, von ihr sollten keine Exemplare erzeugt werden. Stattdessen sollte ein Erbe (zB TStringList) in der Form
Delphi-Quellcode:
verwendet werden (andernfalls wirst Du bei der Verwendung div Methoden entsprechende Fehler bekommen).
var
myStrings: TStrings; begin myStrings:= TStringList.Create; |
Re: TWEbbrowser : String im Dokument suchen
danke habs jetzt !
Uff jetzt brauch ich nurnoch den regulären ausdruck um das wort 'Keine' in dem text zu finden! Danke schonmal =) |
Re: TWEbbrowser : String im Dokument suchen
Choose: Da hste recht. :oops:
Naja... auf jeden Fall muss das Objekt erst erzeugt werden. Von mir aus auch ein Stream, hauptsache created ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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