![]() |
Login mit TWebBrowser
Hallo
Habe mir ein kleines Programm geschrieben um mich auf einer Seite automatisch einloggen und Aktionen durchführen zu können. Hier mal der Code:
Code:
Das Ganze funktioniert soweit einigermaßen. Allerdings machen mir 2 Stellen Probleme:
rocedure TForm1.Button1Click(Sender: TObject);
begin timer1.enabled:=false; timer2.enabled:=false; timer3.enabled:=true; end; procedure TForm1.Timer3Timer(Sender: TObject); begin WebBrowser1.Navigate('http://www.die_Seite.de/nochein_Eintrag/'); WebBrowser1.SetFocus; timer1.enabled:=true; timer3.enabled:=false; end; procedure TForm1.Timer1Timer(Sender: TObject); begin WebBrowser1.OleObject.document.forms.item(1).elements.item('password').value:='meinPW'; WebBrowser1.OleObject.document.forms.item(1).elements.item('name').value:='meinName'; WebBrowser1.OleObject.document.forms.item(1).submit; timer2.enabled:=true; timer1.enabled:=false; end; procedure TForm1.Timer2Timer(Sender: TObject); begin WebBrowser1.Navigate('http://www.die_Seite.de/nochein_Eintrag/start.php'); WebBrowser1.Navigate('http://www.die_Seite.de/nochein_Eintrag/do1.php'); WebBrowser1.Navigate('http://www.die_Seite.de/nochein_Eintrag/outlog'); timer3.enabled:=true; timer2.enabled:=false; end;
Code:
Das ist die erste. Egal welche Reiehenfolge, bei diesen Zeilen gibt es eine EAccessViolation beim Versuch aus der Adresse 000000... zu lesen.
WebBrowser1.OleObject.document.forms.item(1).elements.item('password').value:='meinPW';
WebBrowser1.OleObject.document.forms.item(1).elements.item('name').value:='meinName';
Code:
Die beiden Links um diesen Teil werden ausgeführt, dieser jedoch nicht, obwohl er korrekt ist. Woran kann das liegen?
WebBrowser1.Navigate('http://www.die_Seite.de/nochein_Eintrag/do1.php');
|
Re: Login mit TWebBrowser
Hi,
Probiere das ganze mal ohne Timer zu machen! Ist sauberer Programmierstil und weniger fehleranfällig. |
Re: Login mit TWebBrowser
Wozu der ganze Mist?
Ich weiß nicht, ob der TWebBrowser das modifizieren des HTTP-Headers unterstützt (weil ich ihn nicht benutze), aber zum einloggen muss einfach nur "Benutzername:Passwort" (ohne Anführungszeichen) mit Base64 encodiert werden, und im entsprechenden Teil des Headers mitgeschickt werden. Einfach mal einen Sniffer benutzen, und anschauen, wie das genau funktioniert! Dann kannst du dir den ganzen Scheiss sparen! |
Re: Login mit TWebBrowser
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Login mit TWebBrowser
Noch eine Frage:
Warum führst du 3 Mal hintereinander Navigate aus? Zitat:
führt alle 3 Navigates direkt nacheinander aus, ohne dass alle Seiten vollständig geladen werden. |
Re: Login mit TWebBrowser
Hmm, wie kann ich das Ganze denn ansonsten im WebBrowser hintereinander laden? Ich kenne nur diese Möglichkeit zum anwählen von Links.
|
Re: Login mit TWebBrowser
Zitat:
am besten wäre es ein eigenes php interface für deine anwendung zu schreiben, dass die gewünschten operationen auf dem server ausführt... das kannst du dann mit der idHTTP Komponente von den Indys ansteuern! |
Re: Login mit TWebBrowser
Zitat:
|
Re: Login mit TWebBrowser
Zitat:
Zitat:
|
Re: Login mit TWebBrowser
Pass auf:
Wenn dein TShitBrowser eine Anfrage erstellt, dann beinhaltet die entweder GET oder POST, den Pfad, die HTTP-Version, etc. Da fügst du einfach folgendes als einzelne Zeile ein: "Authorization: Basic MxIxOxkxOxMxbxJxbxBxZxIxMx==" (Wobei "MxIxOxkxOxMxbxJxbxBxZxIxMx==" der Verschlüsselte String "Username:Passwort" ist.) Bisschen Eigeninitiave, wie du z.B. mit Delphi einen String Base64-verschlüsselst herauszufinden, kann auch nicht schaden. ---> GOOGLE <--- Die oben genannte Möglichkeit funktioniert bei jedem HTTP-Clienten, also auch, falls du mal nen Download-Manager oder so schreiben willst! Es ist die sauberste (und vor allem die wirklich einzig richtige) Methode. Als Sniffer kann ich CommView von TamoSoft empfehlen. |
Re: Login mit TWebBrowser
Danke, wenn ich morgen Zeit finden sollte werde ich das mal probieren.
|
Re: Login mit TWebBrowser
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ein kleines Tool angehängt, dass aus Benutzername und Passwort den Authorization-String für HTTP-Header generiert.
Für die eigene Anwendung sicher leicht selbst zu implementieren (daher kein Source Code), aber für den, der einfach nur mal ein bisschen "forschen" will, oder das Ding bei der Entwicklung braucht, sicher ganz nützlich. |
Re: Login mit TWebBrowser
Quark er braucht diese Base64 Scheisse doch gar nicht. Habe die letzten Tage selbst viel mit dem Steuerelement gearbeitet und es kan alles, was man braucht.
@Smarty: Wenn du uns sagen könntest, um welche Seite es sich handelt, dann kann ich dir evtl. weiterhelfen. Habe selbst mit Logins gearbeitet, und zwar sogar mit welchen, die SSL-verschlüsselt waren ;) |
Re: Login mit TWebBrowser
Zitat:
|
Re: Login mit TWebBrowser
Zitat:
Das ändert prinzipiell ja nichts daran, dass der gleiche Header verwendet wird. Wenn du das abhorchen willst, würde ich eine kleine Server-Anwendung schreiben, die alle Anfragen SSL-verschlüsselt an den echten Server weiterleitet. Funktioniert eigentlich ganz gut, du musst halt nur die Serveradresse, die irgendwo im Programm steht ändern, und eventuelle Schutzmaßnahmen, die das verhindern sollen, aushebeln. Zitat:
Für alle anderen, die verstehen wollen, WAS sie da gerade machen, un die selber die Header erzeugen oder SSL-Layer implementieren wollen ist das Tool. Wenn's dich stört, lad's halt nicht runter! |
Re: Login mit TWebBrowser
Hier dieser Sample-Code tut genau das was du willst:
Delphi-Quellcode:
Wobei Webbi1 das Webbrowser-Steuerelement ist. Musst halt nur bei Navi2Page() die URL eintragen.
function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var i, j: Integer; FormItem: Variant; begin Result := False; //no form on document if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then begin Exit; end; //count forms on document for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin try //when the fieldname is found, try to fill out if FormItem.Item(j).Name = FieldName then begin FormItem.Item(j).Value := Value; Result := True; end; except Exit; end; end; end; end; procedure TForm1.Navi2Page(URL : String); begin Webbi1.Navigate(URL); Wait; end; procedure TForm1.Wait; begin while Webbi1.ReadyState <> READYSTATE_COMPLETE do begin Application.ProcessMessages; Sleep(0); end; while Webbi1.Busy = True do begin Application.ProcessMessages; Sleep(0); end; end; procedure TForm1.Button1Click(Sender: TObject); begin //Geht auf die Website Navi2Page('http://deine_url.de'); //Gibt die Benutzerinfos in die Felder ein FillForm(Webbi1, 'Name', Edit1.Text); FillForm(Webbi1, 'PW', Edit2.Text); //Schickt das ganze an den Server Webbi1.OleObject.Document.forms.item(0).submit; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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