Autor |
Beitrag |
DieBrille
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 25.12.08 18:11
Hallo,
Ich wollt mir ein kleines Prog erstellen, dass
auf einer Internetseite,bei mir jetzt aaotracker.com
nach einem Account sucht, dessen Daten ( frei zugänglich natürlich  )
ausliest und in einem Memo darstellt.
Soweit so gut.
Mein Code zum suchen des Accounts funktioniert bereits wunderbar und
er zeigt mir auch im twebbrowser das gewünschte suchergebnis.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var Quell : string; Position,i : integer; begin webbrowser1.Navigate('http://aaotracker.com/playersearch.php'); Wait(webbrowser1); webbrowser1.oleobject.document.forms.item(0).elements.item('exactusername').value := Edit1.text; WebBrowser1.OleObject.document.forms.item(0).submit; |
Wenn ich nun allerdings mit
Delphi-Quelltext 1:
| Quell := WebBrowser1.OleObject.Document.Body.InnerHtml; |
den Quellcode lade
gibt er mir noch den "alten" Quelltext wieder, von dem Formular wo ich meinen
Sucheintrag eingebe.
Nun ist meine Frage: Wie bekomme ich es hin, dass er mir den "neuen" Quelltext mit den Suchergebnissen
wiedergibt,sodass ich diese verarbeiten kann ?
Moderiert von Christian S.: Quote- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 25.12.08 18:24
Hallo und
Ich würde dir eher zu TIdHttp raten, es sei denn du kannst auf eine visuelle Darstellung der Seite nicht verzichten. Denn rein zum Quelltextdownload brauchst du TWebBrowser nicht. Einen Vorteil hat er allerdings: Du kannst auf die geparsten Elemente der Seite direkt zugreifen.
Warum dein Code nicht geht werde ich mal schauen.
|
|
Bob Murphy
      
Beiträge: 91
XP, Ubuntu
Delphi 7 SE, Delphi 2007
|
Verfasst: Do 25.12.08 19:59
Versuchs mal mit der Funktion:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean; var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); if Result then ACode.Add(ss.Datastring); finally ss.Free; end; end; |
Aufrufen kannste das so: WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
Zuletzt bearbeitet von Bob Murphy am Do 25.12.08 21:06, insgesamt 1-mal bearbeitet
|
|
DieBrille 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 25.12.08 20:10
Die Funktion gibt mir leider auch nur den "alten" Quelltext wieder
ohne die Suchergebnisse aber thx
@jaenicke : mit der idHTTP hab ich leider noch weniger Ahnung als vom
Webbrowser, mein bisheringen code hab ich mir auch mehr
oder weniger zusammengesucht, der webbrowser sah da ersteinmal
unkomplizierter aus. Bin noch nich allzulange mit Delphi am
werkeln...
|
|
Bob Murphy
      
Beiträge: 91
XP, Ubuntu
Delphi 7 SE, Delphi 2007
|
Verfasst: Do 25.12.08 20:59
DieBrille hat folgendes geschrieben : | Die Funktion gibt mir leider auch nur den "alten" Quelltext wieder
ohne die Suchergebnisse aber thx |
Dann stimmt etwas an deinen Code nicht.... hab die funktion grade mit deiner Seite getestet und es läuft wunderbar....
|
|
DieBrille 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 25.12.08 23:25
Ich hab einfach deine funktion eingefügt und den"Quell=..." durch den Aufruf ersetzt^^
Mehr enthält dieses Prog imo noch nicht.
Es funktioniert an sich ja auch wunderbar. Mein Problem ist, dass in dem
Quelltext der mir ausgegeben wird nicht die Suchergebnisse stehen, sondern stattdessen
immer noch z.B die Eingabefelder und den Search Button.
Ich suche z.B nach dem Namen Hallo123 und geb ihn in mein edit1feld ein. Drück ich auf
den Button fügt das Prog den namen ein und "drückt" den Search button. Im Twebbrowserfenster
wird auch alles richtig dargestellt, ich seh dann die Searchresults :den Namen Hallo123 und dahinter die dazu
gehörigen Daten. Sprich diese müssten dann auch im Quelltext stehen. Wenn ich diesen nun aber auslese
gibt er mir wieder den Quellcode von dem Suchformular aus, ohne Name etc... .
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 25.12.08 23:37
Wann liest du denn aus? Vielleicht ist die Seite noch nicht geladen?
Das Auslesen gehört in das Ereignis OnDocumentComplete, dann ist die Seite / ein Frame fertig geladen.
|
|
Magic J
      
Beiträge: 66
WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
|
Verfasst: Do 25.12.08 23:37
hi,
möglichweise bekommst du das html vom falschen Frame?!
versuchs doch mal hiermit:
Delphi-Quelltext 1:
| webbrowser1.oleobject.document.forms.item(1)...usw... |
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 25.12.08 23:38
Frame != Form, und aufs Formular greift er ja nur zum Abschicken zu. Und das funktioniert ja. 
|
|
DieBrille 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 26.12.08 00:48
Fürs fertig laden ist meine Wait function zuständig:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure Wait(eWebBrowser: TWebBrowser); begin repeat Sleep(50); Application.ProcessMessages; until (eWebBrowser.ReadyState = READYSTATE_COMPLETE) or (Application.Terminated); end; |
Die Ruf ich einma zwischendurch auf ( siehe oben) und einmal bevor er den quellcode holen
soll
Moderiert von Narses: Quote- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 26.12.08 01:32
Das ist eine schlechte Herangehensweise. Windows funktioniert ereignisbasiert.
OnDocumentComplete ist der richtige Ort für das was nach dem Laden der Seite passieren soll.
Hast du einmal getestet, ob der Quelltext richtig ausgegeben wird, wenn du manuell mit einem Button das Auslesen startest (wenn du siehst, dass die Seite komplett geladen ist)?
|
|
DieBrille 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 26.12.08 02:17
Ah..das wars..mitm 2 Button klappts super
die wait-function hab ich ausm andren threat kopiert...
nunja dann werd ich das mal mit OnDocumentComplete machen
Vielen Dank!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 26.12.08 02:35
Was du machen kannst ist folgendes: Entweder du entscheidest an der aktuellen Adresse des WebBrowsers ob du die Suche starten oder das Auslesen machen musst, oder du setzt bei der Navigation zum Suchfeld eine entsprechende globale Variable.
Jedenfalls solltest du das Wait gar nicht verwenden oder zumindest das Sleep durch dieses Delay ersetzen:
www.delphipraxis.net...delay+revisited.html
Generell solltest du aber am besten alles durch die entsprechenden Events regeln statt zu warten, dass etwas passiert.
Wenn es sich um eine Seite mit mehreren Frames gehandelt hätte, hätte man da übrigens noch unterscheiden müssen ob nur ein Frame oder alles fertig geladen ist.
Unter dieser Adresse findest du dies und insgesamt eine recht gute Übersicht über TWebBrowser in Delphi:
www.cryer.co.uk/bria...m#OnDocumentComplete
|
|
DieBrille 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 26.12.08 15:11
Danke ich werds mir mal angucken^^
|
|