Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi webseiten durchsuchen + neu laden (https://www.delphipraxis.net/140167-webseiten-durchsuchen-neu-laden.html)

eliciel 12. Sep 2009 02:43


webseiten durchsuchen + neu laden
 
hallo zusammen,

ich versuche zur zeit ein programm zum laufen zu kriegen, welches eine seite laedt, sie nach einem string durchsucht (falls gefunden, eintrag in einer listbox) und dann neulaedt.

arbeite ich mit OnDocumentComplete, laeuft der aktualisierungsvorgang sehr schnell durch, jedoch "verschluckt" er ab und zu treffer und er speichert nichts in der listbox.

arbeite ich mit einem timer und frage den seitenstand ab mit ReadyState(=4), verschluckt er die treffer ebenso haeufig.

ich moechte, dass der aktualisierungsvorgang so schnell wie moeglich durchgefuehrt wird, ohne dass irgendwelche treffer verschluckt werden, allerdings hab ich das bisher nur realisieren koennen mit entsprechend hohem timer-interval.

aus welchem grund fuehrt er den code unter OnDocumentComplete manchmal nicht aus? es scheint, als wuerde die seite schneller neuladen als er den code ausfuehren kann, wobei der code dann uebersprungen und nicht mehr ausgefuehrt wird und ein neues OnDocumentComplete von vorn beginnt. warum tut er das?

Delphi-Quellcode:
function suchetext(WB: TWebBrowser; Text: string): boolean ;
var
   tr: IHTMLTxtRange;
begin
   if Assigned(WB.Document) then
   begin
     tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
     if tr.findText(Text, 1, 0) then result := true else result := false;
   end;
end;


procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if suchetext(webbrowser1, 'text') then listbox1.items.add('treffer!');
  // hier stehen noch mehr abfragen, die die prozedur wohl etwas verlangsamen
  webbrowser1.navigate('http://localhost/');
end;

die suchetext - funktion hab ich irgendwo beim googlen mal gefunden, in anderem zusammenhang (woerter suchen und farblich markieren).. ich hoffe, ich benutz die hier richtig?

Klaus01 12. Sep 2009 17:28

Re: webseiten durchsuchen + neu laden
 
Hallo,

kann es eventuell daran liegen:

Zitat:

Description
Write an OnDocumentComplete event handler to take specific action when a frame or document is fully loaded into the Web browser .For a document without frames, this event occurs once when the document finishes loading. On a document containing multiple frames, this event occurs once for each frame. When the multiple-frame document finishes loading, the Web browser fires the event one final time.
Grüße
Klaus

eliciel 12. Sep 2009 18:38

Re: webseiten durchsuchen + neu laden
 
hallo klaus,

danke fuer die antwort. die seite, die geladen wird, enthaelt jedoch keine "multiple frames". daran liegt es also nicht.

aber klingt interessant, woher gibt es solche beschreibungen?

Klaus01 12. Sep 2009 18:50

Re: webseiten durchsuchen + neu laden
 
Zitat:

Zitat von eliciel
hallo klaus,

danke fuer die antwort. die seite, die geladen wird, enthaelt jedoch keine "multiple frames". daran liegt es also nicht.

aber klingt interessant, woher gibt es solche beschreibungen?

Die Beschreibung ist aus der Delphi Hilfe.

Ich weiß ja nicht ob Du mit der jetzigen (fehlerhaften) Lösung
festgenagelt bist.

Ansonsten könntest Du es mal mit TidHttp probieren.
TidHttp.get liefert das Dokument als Text oder Stream.

Grüße
Klaus

eliciel 13. Sep 2009 01:37

Re: webseiten durchsuchen + neu laden
 
leider so wenig an der methode gebunden, dass ich umgeschwenkt bin auf php. damit liess es sich auf anhieb loesen und rennt (denke ich) schnell genug.

reizen tut mich die von dir vorgeschlagene methode jedoch auch, nur findet sich weder in der hilfe noch bei google ansprechendes material.

Sir Rufo 13. Sep 2009 02:36

Re: webseiten durchsuchen + neu laden
 
Zitat:

Zitat von eliciel
leider so wenig an der methode gebunden, dass ich umgeschwenkt bin auf php. damit liess es sich auf anhieb loesen und rennt (denke ich) schnell genug.

reizen tut mich die von dir vorgeschlagene methode jedoch auch, nur findet sich weder in der hilfe noch bei google ansprechendes material.

:wiejetzt:
TIdHttp -> Google -> Ergebnisse 1 - 10 von ungefähr 517.000 für TidHttp. (0,06 Sekunden) (Der erste Link führt direkt zur Doku der Indy's)
TIdHttp.Get -> Google -> Ergebnisse 1 - 10 von ungefähr 8.010 für TIdHttp.Get. (0,21 Sekunden)

Und da soll nix dabei sein?

http://www.indyproject.org/Sockets/Docs/index.DE.aspx

cu

Oliver

Sprint 13. Sep 2009 07:34

Re: webseiten durchsuchen + neu laden
 
Das Ereignis OnDocumentComplete wird oft mehrmals ausgelöst. Daher musst du prüfen, ob die tatsächliche Seite fertig geladen ist.
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
  Document: IHTMLDocument2;
begin
  TWebBrowser(Sender).ControlInterface.Document.QueryInterface(IID_IHTMLDocument, Document);
  if Assigned(Document) then
    if SucheText(TWebBrowser(Sender), 'text') then
      ListBox1.Items.Add('Treffer!');
end;
Aber wenn du viele Seiten laden willst, dann würde ich auch eher zu TIdHTTP greifen.

eliciel 14. Sep 2009 01:30

Re: webseiten durchsuchen + neu laden
 
ich hab jetzt mal sprints loesung probiert, diese scheint nun wirklich zu funktionieren. die php loesung war nur augenscheinlich fehlerfrei, verschluckte aber immernoch einiges, wie sich jetzt durch den einsatz von sprints loesung herausgestellt hat.

und wieder einmal muss ich feststellen, dass ich in wirklichkeit keinen schimmer von irgendwas im informatikbereich habe. was genau seine zwei extrazeilen jetzt machen, versteh ich nichtmal im ansatz, und die "indy" docu krieg ich nichmal geoeffnet :D wenn das naechstes jahr so im studium anfaengt, kann ich ja gleich einpacken.

trotzdem vielen dank fuer die hilfe, mein problem scheint jetzt geloest zu sein. ohne tidhttp, was auch immer dieses mysterioese etwas sein soll.

Sir Rufo 14. Sep 2009 01:37

Re: webseiten durchsuchen + neu laden
 
Zitat:

Zitat von eliciel
ich hab jetzt mal sprints loesung probiert, diese scheint nun wirklich zu funktionieren. die php loesung war nur augenscheinlich fehlerfrei, verschluckte aber immernoch einiges, wie sich jetzt durch den einsatz von sprints loesung herausgestellt hat.

und wieder einmal muss ich feststellen, dass ich in wirklichkeit keinen schimmer von irgendwas im informatikbereich habe. was genau seine zwei extrazeilen jetzt machen, versteh ich nichtmal im ansatz, und die "indy" docu krieg ich nichmal geoeffnet :D wenn das naechstes jahr so im studium anfaengt, kann ich ja gleich einpacken.

trotzdem vielen dank fuer die hilfe, mein problem scheint jetzt geloest zu sein. ohne tidhttp, was auch immer dieses mysterioese etwas sein soll.

Ja so ein gezipptes PDF-Dokument kann einen schon vor große Schwierigkeiten stellen ...

... ich denke bei dir liegt das problem im "nicht verstehen wollen",
aber wollen wir dir ja auch nicht wegnehmen, soll ruhig deins bleiben :mrgreen:

eliciel 14. Sep 2009 03:32

Re: webseiten durchsuchen + neu laden
 
wegnehmen? seh jetz grad erst, dass es das auch als .pdf gibt.. war vor die schwierige aufgabe gestellt, ne .chm zu oeffnen, in der ich ausser der "startseite" nichts oeffnen konnte.


edit:
ueberhaupt, was soll dein beitrag?

ich hab in der schule wenig gelernt. ich weiss nicht, was klassen sind, ich hab nie von indy gehoert, ich hab keine ahnung, wie ich tidhttp einbinden kann geschweigedenn benutzen kann, nichts. dagegen hilft mir eine tabelle mit den methoden, die ich mit tidhttp benutzen kann, recht wenig. die tabelle hatte ich auch ueber google gefunden, da ich damit aber nichts anfangen konnte/kann, wurde sie als "nicht ansprechendes material" klassifiziert.


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