Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Twebbrowser Problem... (https://www.delphipraxis.net/53144-twebbrowser-problem.html)

heribert 11. Sep 2005 10:09


Twebbrowser Problem...
 
hi, hab folgenden code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://mail.yahoo.de');
  repeat
  Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
  WebBrowser1.OleObject.document.forms.item(0).elements.item('login').value:='******';
  WebBrowser1.OleObject.document.forms.item(0).elements.item('passwd').value:='*****';
  WebBrowser1.OleObject.document.forms.item(0).submit;
  repeat
  Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
  ClickLink(WebBrowser1, 'Posteingang');
end;
das script loggt sich bei einer mailadresse von yahoo ein und soll dann automatisch auf posteingang klicken (dazu die funktion ClickLink). Nur wird das dann nicht mehr ausgeführt (also er loggt sich ein, klickt aber nicht mehr auf "Posteingang"). Wenn ich aber ClickLink(WebBrowser1, 'Posteingang'); einem anderen button zuweise und nach dem login dann dadrauf klick, funktionierts einwandfrei!

alias5000 11. Sep 2005 10:44

Re: Twebbrowser Problem...
 
ist die Procedure ClickLink von dir, oder hab ich da was übersehen?

heribert 11. Sep 2005 10:59

Re: Twebbrowser Problem...
 
jo, die ist natürlich von mir :)

alias5000 11. Sep 2005 11:20

Re: Twebbrowser Problem...
 
kann das an der liegen, n bisschen Source-Code würde da wahrscheinlich net schaden, oder?

heribert 11. Sep 2005 11:24

Re: Twebbrowser Problem...
 
ne, wie shcon oben gesagt funktioniert die funktion ja einwandfrei, wenn ich sie einfach mit nem anderen button aufrufen lasse...

alias5000 11. Sep 2005 11:28

Re: Twebbrowser Problem...
 
Hängt sich das Programm auf? Die Prozedure ClickLink wird aber noch aufgerufen?

PS.: ups hatte es überlesen...

heribert 11. Sep 2005 12:26

Re: Twebbrowser Problem...
 
nope hängt sich net auf...
ich bin mir net sicher ob die clicklink noch ausgeführt wird... lässt man das mit dem readystate nämlich weg passiert auch nix, aber normalerwiese müsste da ja nen fehler kommen, weil der link noch gar nicht geklickt werden könnte, wenn die seite noch nicht geladen ist...

marabu 11. Sep 2005 12:30

Re: Twebbrowser Problem...
 
Hallo heribert,

dein Code bis zum Aufruf ClickLink() funktioniert bei mir. Versuche doch mal per single step in die Routine rein zu gehen.

Grüße vom marabu

heribert 11. Sep 2005 12:39

Re: Twebbrowser Problem...
 
ok, also die clicklink aktion wird nicht aufgerufen... ka warum!

alias5000 11. Sep 2005 12:45

Re: Twebbrowser Problem...
 
das heißt das der Browser dann nie zuendegeladen hat.... Wie lange lässt du dir Zeit?

alias5000 11. Sep 2005 12:50

Re: Twebbrowser Problem...
 
Warum eigentlich
Delphi-Quellcode:
until Webbrowser1.ReadyState [b]>=[/b] READY_STATE_COMPLETE
???

Machs doch einfach so: überprüfe im Ereignis OnDocumentComplete, ob die GESAMTE Webseite fertiggeladen wurde
(wie das geht siehe diesen Thread: DP:OnDocumentComplete)

Und dann führst du die Prozedure ClickLink darin aus.

Gruß alias5000

heribert 11. Sep 2005 13:06

Re: Twebbrowser Problem...
 
ich hab aber den readystate auch shcon ganz weggelassen (auch shconmal gesagt) und da hätte, wenn die ClickLink ausgeführt worden wäre, nen fehler kommen müssen (die seite wär ja dann noch nicht fertiggeladen und der browser hätte schon versucht den link zu klicken, der noch gar nicht da ist...
aber dem war net so...

//edit: also ich glaub ich hab den fehler, aber ka, ob ich ihn reparieren kann:
die clicklink wird anscheinend doch aufgerufen, ich hab mich da weng verplant... (gibt natürlich keinen fehler, er findet bloß nixx zum draufklicken)
Delphi-Quellcode:
  repeat
  Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
das funktioniert anscheinend nur mit navigate, aber nicht mit nem button-submit...
das heißt er führt die clicklink immer direkt nahc dem submit aus und waretet nicht, bsi die neue seite fertiggladen ist.
das mit dem ondocumentcomplete hat auch nicht geklappt...

heribert 24. Sep 2005 08:44

Re: Twebbrowser Problem...
 
weiß denn keiner von euch, was ich da machen soll?

marabu 24. Sep 2005 09:12

Re: Twebbrowser Problem...
 
Hallo heribert,

das sollte so funktionieren:

Delphi-Quellcode:
interface

...

type
  TWebForm = class(TForm)
    ...
  private
    DocumentLoaded: boolean;
    ...
  end;

implementation

...

procedure TWebForm.WebBrowserBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  if pDisp = WebBrowser.DefaultInterface then
    DocumentLoaded := false;
end;

procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if pDisp = WebBrowser.DefaultInterface then
    DocumentLoaded := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser.Navigate('http://mail.yahoo.de');
  repeat
    Application.ProcessMessages;
  until DocumentLoaded;

  WebBrowser.OleObject.document.forms.item(0).elements.item('login').value:='******';
  WebBrowser.OleObject.document.forms.item(0).elements.item('passwd').value:='*****';
  WebBrowser.OleObject.document.forms.item(0).submit;
  repeat
    Application.ProcessMessages;
  until DocumentLoaded;

  ClickLink(WebBrowser, 'Posteingang');
end;
Grüße vom marabu

heribert 24. Sep 2005 09:25

Re: Twebbrowser Problem...
 
wow, ich weiß net wie ich dir danken soll :D klappt perfekt

Andi1982ka 22. Mär 2006 17:28

Re: Twebbrowser Problem...
 
OH schade, hatte genau das selbe problem!! nur hab ich noch so ein java-werbebanner bei mir mit drauf wo dann ebenfalls der status gesetzt wird :( dann kommt er wieder durcheinander und nix geht...


Aber wenn ich die if-Abfrage auf das pDisp = WebBrowser1.DefaultInterface weglasse funktionierts!!! JUHUU :) wofür ist diese abfrage???

marabu 22. Mär 2006 20:23

Re: Twebbrowser Problem...
 
Hallo Andi,

die Erklärung findest du hier: klick

Grüße vom marabu

Andi1982ka 23. Mär 2006 15:37

Re: Twebbrowser Problem...
 
aber ist schon komisch... vor und nach meinem Formular-submit läuft er nicht in diese abfrage rein:
Delphi-Quellcode:
if pDisp = WebBrowser.DefaultInterface then
irgendwas stimmt da nicht...

marabu 23. Mär 2006 18:09

Re: Twebbrowser Problem...
 
Wenn du den URL rausrückst, kann ich vielleicht mehr dazu schreiben.

marabu

Andi1982ka 24. Mär 2006 05:32

Re: Twebbrowser Problem...
 
An diese seite wirst du wohl nicht ran kommen. aber könnte dir den seitenquelltext zukommen lassen. Ich vermute stark dass es an einem Java-Script liegt das einen Werbebanner lädt. bin mir aber nicht sicher.

Ohne diese If-Abfrage auf das pDisp = WebBrowser.DefaultInterface funktioniert es zumindest zu 80% der Fälle! Kann man das pDisp vielleicht in einer Globalen Variable sichern wenn man den Schalter auf "False" setzt? Dann könnte man ja später wieder abfragen dass nur das selbe pDisp wieder "DocumentLoaded := true;" setzen darf.

Andi1982ka 24. Mär 2006 08:21

Re: Twebbrowser Problem...
 
Oh ich bin so blöde :nut: Habe gerade gesehen dass der oben angesprochene Banner in einem Extra frame ist...

Kann ich irgendwie abfragen welches frame den schalter "DocumentLoaded" auf false setzt? Dann könnte ich beim Setzen auf true wieder nur das frame auf true setzen lassen wo auch auf false gesetzt hat...

Nur wie geht das???

marabu 24. Mär 2006 08:23

Re: Twebbrowser Problem...
 
Die Prüfung auf den frame hast du selbst ausgeschaltet - das war die Zeile mit pDisp und DefaultInterface. Die ausführliche Erklärung dazu steht auf der Seite mit dem von mir angegebenen URL.

marabu

Andi1982ka 24. Mär 2006 08:27

Re: Twebbrowser Problem...
 
achso ok... aber was macht denn die prüfung hier für einen sinn in diesem Ereignis

Delphi-Quellcode:
procedure TWebForm.WebBrowserBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  if pDisp = WebBrowser.DefaultInterface then
    DocumentLoaded := false;
end;
das danach abzufragen um zu prüfen ob auch wirklich wieder das selbe frame den schalter auf "true" setzt finde ich verständlich. Nur das im BeforeNavigate2 versteh ich den sinn nicht... In deinem Link wird es auch nur danach abgefragt...

marabu 24. Mär 2006 08:35

Re: Twebbrowser Problem...
 
Im Ereignis OnBeforeNavigate2() kannst du die Prüfung auch weglassen. Dann wird die Variable DocumentLoaded bei sieben Frames halt achtmal auf false gesetzt.

marabu

Andi1982ka 24. Mär 2006 08:51

Re: Twebbrowser Problem...
 
Ich werde heute mittag mal versuchen im "OnBeforeNavigate2()" das pDisp zu speichern und dann im DocumentComplete() abzufragen ob das auch wirklich mein Frame ist wo den Schalter wieder auf "True" setzt.

Asatru 30. Mai 2007 15:48

Re: Twebbrowser Problem...
 
#Edit: Wenn ich den Quellcode so verwende sagt er mir immer das in

procedure TWebForm.WebBrowserBeforeNavigate2(Sender: TObject;

ein fehler liegen soll!

Kann mir sagen was da falsch ist?!?


MFG

Quellcode von marubu

marabu 30. Mai 2007 16:04

Re: Twebbrowser Problem...
 
Herzlich willkommen in der Delphi-PRAXiS, Asatru.

Lass dich nicht von meinen inkonsistenten Bezeichnern in Beitrag #14 verwirren. Die Qualifizierung mit TWebForm, TDemoForm und TForm1 kam durch Copy & Paste aus verschiedenen Demos zustande. Deine IDE erzeugt automatisch die richtigen Qualifizierungen, wenn du die Events im Object Inspector erzeugst.

Freundliche Grüße vom marabu

Asatru 30. Mai 2007 16:15

Re: Twebbrowser Problem...
 
Ok Danke schön. Versuche das alles auf Mufa zu beziehen,

nun hab ich nochmal ne Frge zu dem ClickLink

Nach erfolgreichen Login soll er den Link Free SMS Aktivieren

Zitat:

Free SMS
Möchte das er den Link eben klickt und nicht über navigate steuern, wie könnt ich das machen?!?

marabu 30. Mai 2007 17:52

Re: Twebbrowser Problem...
 
Hallo,

jeder link kann über seine Methode Click() aktiviert werden - das ist der einfache Teil der Aufgabe. Vorher musst du das Link-Objekt lokalisieren, was je nach Seitengestaltung (frames?) mehr oder weniger aufwendig sein kann. Vielleicht hilft dir dieser Thread bei der Informationsbeschaffung: link einer seite anklicken

Freundliche Grüße

DataCool 31. Mai 2007 10:47

Re: Twebbrowser Problem...
 
Hi,

@Marabu:
Könntest Du mir sagen warum Dein Demo Source bei folgender Seite nicht funktioniert ?!:

Code:
<FORM Action="login.php" name="SendForm" method="POST">

<Input type="hidden" name="submit" value="senden">
<COLGROUP>
<COL>
<COL>
</COLGROUP>
<TR><TD height=25 BgColor="#CD7DA4" ColSpan=2 Align="center">[B]XYZ Login[/B]</TD></TR>
<TR>
   <TD BgColor="#EB8DBB">Kennwort:</TD>
   <TD BgColor="#FF99CB"><Input type="text" class="forminputa" style="width : 200px;" name="FormKennwort" size=15></TD>
</TR>
<TR>
   <TD BgColor="#EB8DBB">Passwort:</TD>

   <TD BgColor="#FF99CB"><Input type="password" class="forminputa" style="width : 200px;" name="FormPasswort" size=15></TD>
</TR>
<TR>
   <TD ColSpan=2 BgColor="#EB8DBB" Align="center"><Input type="image" src="/images/gif/senden.gif" name="submit" border=0 ALT="Login"></TD>
</TR>
</FORM>
Der Fehler tritt in Deinem Source bei :
WebB.OleObject.document.forms.item(0).submit;

Die Fehlermeldung ist :
"EOleSysError" "Mitglied nicht gefunden"

Thx & Greetz DataCool

marabu 31. Mai 2007 12:00

Re: Twebbrowser Problem...
 
Hallo,

die von dir zitierte Code-Zeile funktioniert, wenn deine Form einen submit-button besitzt. Da du den Button durch ein Image ersetzt hast, solltest du die Methode Click von diesem IMG-Element benutzen um die Form zu verschicken.

Freundliche Grüße

DataCool 31. Mai 2007 12:07

Re: Twebbrowser Problem...
 
Hi Marabu,

dumme Frage, aber wie :oops:

Thx & greetz DataCool

marabu 31. Mai 2007 13:24

Re: Twebbrowser Problem...
 
Schau mal hier: kein submit nur ein bild

Freundliche Grüße

DataCool 31. Mai 2007 13:34

Re: Twebbrowser Problem...
 
Hi Marabu,

Delphi-Quellcode:
WebB.OleObject.Document.GetElementsByName('submit').Item(0).Click;
Geht auch nicht, es kommt zwar kein Fehler, aber Seite bleibt bei der ausgefüllten Login-Seite stehen.
Könnte es damit zusammen hängen das in der Page :

Code:
<Input type="hidden" name="submit" value="senden">
Somit gibt es 2 x Submit :?

Greetz DataCool

Edit:

Delphi-Quellcode:
WebB.OleObject.Document.GetElementsByName('submit').Item(1).Click;
Funktioniert, vielen Dank !!!!!!!!!

Asatru 16. Apr 2009 18:10

Re: Twebbrowser Problem...
 
Zitat:

Zitat von marabu
Delphi-Quellcode:
procedure TWebForm.WebBrowserBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  if pDisp = WebBrowser.DefaultInterface then
    DocumentLoaded := false;
end;

procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if pDisp = WebBrowser.DefaultInterface then
    DocumentLoaded := true;
end;
Grüße vom marabu

Wie müsste es eigentlich aussehen, wenn man den Webrowser von einer Form2 aus steuern würde? Also durch ein ButtonClick auf eine Webseite Changed und von der Form 2 aus

Delphi-Quellcode:
  repeat
    Application.ProcessMessages;
  until DocumentLoaded;
sagen möchte

toms 16. Apr 2009 18:38

Re: Twebbrowser Problem...
 
Musst einfach DocumentLoaded sichtbar machen für Form2


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