Entwickler-Ecke
Internet / Netzwerk - Delphi--Problem mit Quellcode auslesen
DieBrille - Do 25.12.08 18:11
Titel: Delphi--Problem mit Quellcode auslesen
Hallo,
Ich wollt mir ein kleines Prog erstellen, dass
auf einer Internetseite,bei mir jetzt
http://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 - Do 25.12.08 18:24
Hallo und :welcome: ;-)
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 - 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);
DieBrille - 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 - 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 - 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 - 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 - 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 - Do 25.12.08 23:38
Frame != Form, und aufs Formular greift er ja nur zum Abschicken zu. Und das funktioniert ja. ;-)
DieBrille - 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 - Fr 26.12.08 01:32
Das ist eine schlechte Herangehensweise. Windows funktioniert ereignisbasiert. :roll:
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 - 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 - 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:
http://www.delphipraxis.net/topic7355_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:
http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_events.htm#OnDocumentComplete
DieBrille - Fr 26.12.08 15:11
Danke ich werds mir mal angucken^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!