![]() |
Twebbrowser Problem...
hi, hab folgenden code:
Delphi-Quellcode:
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!
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; |
Re: Twebbrowser Problem...
ist die Procedure ClickLink von dir, oder hab ich da was übersehen?
|
Re: Twebbrowser Problem...
jo, die ist natürlich von mir :)
|
Re: Twebbrowser Problem...
kann das an der liegen, n bisschen Source-Code würde da wahrscheinlich net schaden, oder?
|
Re: Twebbrowser Problem...
ne, wie shcon oben gesagt funktioniert die funktion ja einwandfrei, wenn ich sie einfach mit nem anderen button aufrufen lasse...
|
Re: Twebbrowser Problem...
Hängt sich das Programm auf? Die Prozedure ClickLink wird aber noch aufgerufen?
PS.: ups hatte es überlesen... |
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... |
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 |
Re: Twebbrowser Problem...
ok, also die clicklink aktion wird nicht aufgerufen... ka warum!
|
Re: Twebbrowser Problem...
das heißt das der Browser dann nie zuendegeladen hat.... Wie lange lässt du dir Zeit?
|
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: ![]() Und dann führst du die Prozedure ClickLink darin aus. Gruß alias5000 |
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:
das funktioniert anscheinend nur mit navigate, aber nicht mit nem button-submit...
repeat
Application.ProcessMessages; until WebBrowser1.ReadyState >= READYSTATE_COMPLETE; 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... |
Re: Twebbrowser Problem...
weiß denn keiner von euch, was ich da machen soll?
|
Re: Twebbrowser Problem...
Hallo heribert,
das sollte so funktionieren:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: Twebbrowser Problem...
wow, ich weiß net wie ich dir danken soll :D klappt perfekt
|
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??? |
Re: Twebbrowser Problem...
|
Re: Twebbrowser Problem...
aber ist schon komisch... vor und nach meinem Formular-submit läuft er nicht in diese abfrage rein:
Delphi-Quellcode:
irgendwas stimmt da nicht...
if pDisp = WebBrowser.DefaultInterface then
|
Re: Twebbrowser Problem...
Wenn du den URL rausrückst, kann ich vielleicht mehr dazu schreiben.
marabu |
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. |
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??? |
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 |
Re: Twebbrowser Problem...
achso ok... aber was macht denn die prüfung hier für einen sinn in diesem Ereignis
Delphi-Quellcode:
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...
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; |
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 |
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.
|
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 |
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 |
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:
|
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: ![]() Freundliche Grüße |
Re: Twebbrowser Problem...
Hi,
@Marabu: Könntest Du mir sagen warum Dein Demo Source bei folgender Seite nicht funktioniert ?!:
Code:
Der Fehler tritt in Deinem Source bei :
<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> WebB.OleObject.document.forms.item(0).submit; Die Fehlermeldung ist : "EOleSysError" "Mitglied nicht gefunden" Thx & Greetz DataCool |
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 |
Re: Twebbrowser Problem...
Hi Marabu,
dumme Frage, aber wie :oops: Thx & greetz DataCool |
Re: Twebbrowser Problem...
|
Re: Twebbrowser Problem...
Hi Marabu,
Delphi-Quellcode:
Geht auch nicht, es kommt zwar kein Fehler, aber Seite bleibt bei der ausgefüllten Login-Seite stehen.
WebB.OleObject.Document.GetElementsByName('submit').Item(0).Click;
Könnte es damit zusammen hängen das in der Page :
Code:
Somit gibt es 2 x Submit :?
<Input type="hidden" name="submit" value="senden">
Greetz DataCool Edit:
Delphi-Quellcode:
Funktioniert, vielen Dank !!!!!!!!!
WebB.OleObject.Document.GetElementsByName('submit').Item(1).Click;
|
Re: Twebbrowser Problem...
Zitat:
Delphi-Quellcode:
sagen möchte
repeat
Application.ProcessMessages; until DocumentLoaded; |
Re: Twebbrowser Problem...
Musst einfach DocumentLoaded sichtbar machen für Form2
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz