Autor Beitrag
DieBrille
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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.

ausblenden 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);     //Prozedur damit die seite fertig läd bevor es weiter geht
webbrowser1.oleobject.document.forms.item(0).elements.item('exactusername').value := Edit1.text;
WebBrowser1.OleObject.document.forms.item(0).submit;


Wenn ich nun allerdings mit
ausblenden 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 user profile iconChristian S.: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 91

XP, Ubuntu
Delphi 7 SE, Delphi 2007
BeitragVerfasst: Do 25.12.08 19:59 
Versuchs mal mit der Funktion:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 91

XP, Ubuntu
Delphi 7 SE, Delphi 2007
BeitragVerfasst: Do 25.12.08 20:59 
user profile iconDieBrille hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
BeitragVerfasst: Do 25.12.08 23:37 
hi,

möglichweise bekommst du das html vom falschen Frame?!

versuchs doch mal hiermit:
ausblenden Delphi-Quelltext
1:
webbrowser1.oleobject.document.forms.item(1)...usw...					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.12.08 23:38 
Frame != Form, und aufs Formular greift er ja nur zum Abschicken zu. Und das funktioniert ja. ;-)
DieBrille Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 26.12.08 00:48 
Fürs fertig laden ist meine Wait function zuständig:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Wait(eWebBrowser: TWebBrowser);
begin
  repeat
    Sleep(50); // 50ms warten
    Application.ProcessMessages; // Andere Events verarbeiten
  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 user profile iconNarses: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 26.12.08 15:11 
Danke ich werds mir mal angucken^^