Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Login Simulieren (WebBrowser) (https://www.delphipraxis.net/162935-login-simulieren-webbrowser.html)

GouJetir 9. Sep 2011 18:03

Login Simulieren (WebBrowser)
 
Hallo,
ich möchte einen WebBrowser in meinem Programm haben,bei dem ich mich auf www.hotmail.de automatisch einlogge. Dazu will ich bei Edit1 meine E-Mail/Username und bei Edit2 das Passwort.

Habe bereits 30 Minuten gesucht,aber nicht viel gefunden,da diese ebenfalls irgendwelche Errors hatten usw.
Wie ich einen WebBrowser mache weiss ich,würde aber gut sein,wenn ihr die vollständigen Code von allem gebt.

Also:
Bei Edit1 = Username/E-Mail --- Edit2 = Passwort
Auf Login drücken
WebBrowser geht auf Hotmail.de
Gebt Daten ein (Edit1 und Edit2)
Loggt sich ein

Danke :)

API 10. Sep 2011 13:23

AW: Login Simulieren (WebBrowser)
 
Hallo, so kannst du einloggen:

Delphi-Quellcode:
Webbrowser1.OleObject.document.forms.item(0).elements.item('login').value := Edit1.Text;
Webbrowser1.OleObject.document.forms.item(0).elements.item('passwd').value := Edit2.Text;
Webbrowser1.OleObject.document.forms.item(0).elements.item('SI').click;

GouJetir 11. Sep 2011 12:05

AW: Login Simulieren (WebBrowser)
 
Danke für die Antwort.
Bei Hotmail.de funktioniert es perfekt,aber bei web.de und anderen Seiten funktioniert es nicht.

Ich frag mich auch,was das hier bedeuten soll:

Delphi-Quellcode:
Webbrowser1.OleObject.document.forms.item(0).elements.item('login').value := Edit1.Text;
Webbrowser1.OleObject.document.forms.item(0).elements.item('passwd').value := Edit2.Text;
Webbrowser1.OleObject.document.forms.item(0).elements.item('SI').click;
Was bedeutet das bei ('login'),('passwd') und ('SI').
Woher kommen die und muss ich die für die anderen Seiten ändern?
Bei Hotmail kommt der sofort zur loginbox aber bei web nicht und ich weiss nicht wie das geht.

Edit: Ich hab gerade ein Tutorial dafür gefunden,aber das geht immernoch nicht.Ich habe da jetzt ('username') ('password') und ('rv_dologon').
Den Error bekomm ich wenn ich den Button einloggen drücke:
Project XXX.exe raised exception class EAclassViolation with message 'Access violation at adress 0045C03C3 in module 'XXX.exe'.Read of address '00000000'.Process stopped.Use step or Run to continue.

Gruß
GouJetir

API 11. Sep 2011 12:25

AW: Login Simulieren (WebBrowser)
 
Zitat:

Zitat von GouJetir (Beitrag 1123286)
Woher kommen die und muss ich die für die anderen Seiten ändern?

Einfach mal den Quelltext der Webseite betrachten und schauen, um was für Felder es sich handelt und wie diese heißen.

Auf web.de ist der Login-Button ein Bild, muss dementsprechend auch anders angeklickt werden.

Delphi-Quellcode:
uses
 MSHTML;

procedure WB_ClickImage(WB: TWebbrowser; ImageSRC: string);
var
  iDoc: IHtmlDocument2;
  i: Integer;
  iDisp: IDispatch;
  iColl: IHTMLElementCollection;
  InputImage: HTMLInputImage;
begin
  if Assigned(WB.Document) then
  begin
    WB.Document.QueryInterface(IHTMLDocument2, iDoc);
    if Assigned(iDoc) then
    begin
      iDisp := iDoc.all.tags('INPUT');
      if Assigned(iDisp) then
      begin
        iDisp.QueryInterface(IHTMLElementCollection, iColl);
        if Assigned(iColl) then
        begin
          ImageSRC := AnsiUpperCase(ImageSRC);
          for i := 1 to iColl.Get_length do
          begin
            iDisp := iColl.item(Pred(i), 0);
            iDisp.QueryInterface(HTMLInputImage, InputImage);
            if Assigned(InputImage) then
            begin
              if Pos(ImageSRC, AnsiUpperCase(InputImage.src)) <> 0 then
              begin
                InputImage.Click;
              end;
            end;
          end;
        end;
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Webbrowser1.OleObjec.document.forms.item(0).elements.item('username').value := Edit1.Text;
 Webbrowser1.OleObject.document.forms.item(0).elements.item('password').value := Edit2.Text;
 WB_ClickImage(Webbrowser1, 'btn_login.gif');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Webbrowser1.Navigate('https://produkte.web.de/freemail-webmail/');
end;

GouJetir 11. Sep 2011 12:39

AW: Login Simulieren (WebBrowser)
 
Okay aber jetzt bekomme ich:

Undeclared indentifier: WB_ClickImage

himitsu 11. Sep 2011 12:57

AW: Login Simulieren (WebBrowser)
 
Einige (viele) Seitenbeteiber haben halt etwas dagegen (oder es verstößt sogar gegen deren AGB) und bauen kleine Hindernisse ein.

Wobei z.B. bei eMails von web.de oder hotmail.de ja noch offizielle Wege gibt, wie z.B. POP3 :stupid:


Zitat:

WB_ClickImage
Was mag wohl die Fehlermeldung bedeuten?
Und nun rate mal, was man dagegen machen könnte. (PS: hier im Thread steht die Lösung)


PS: falls du den Code nicht verstanden hast:
Delphi-Quellcode:
document.forms.item(0).elements.item('login')
greift auf ein bestimmtes Element im "ersten" gefundenen Formular zu ... nur kann es mehrere Formulare auf eine Webseite geben, ebenso könnte das gesuchte Formular auch noch in einem Frame versteckt sein.
Da muß man dann natürlich, je nach Webseite die "Adresse", bzw. den Weg anpassen, sowie die Namen der Elemente, falls sie einen Namen haben.

Thom 11. Sep 2011 13:02

AW: Login Simulieren (WebBrowser)
 
Zitat:

Zitat von himitsu (Beitrag 1123295)
[...]oder es verstößt sogar gegen deren AGB[...]

...wobei nicht alles, was sich einige Leute vorstellen und der Welt als "AGB" präsentieren, auch eine gesetzliche Grundlage hat. :roll:

himitsu 11. Sep 2011 13:12

AW: Login Simulieren (WebBrowser)
 
Ich sagte nicht, daß man dafür gleich im Knast landen könnte.
Aber daß der Betreiber einen dann von seinem Angebot ausschließt, wäre mindestens eine passende Maßnahme/Reaktion.

Wobei es ja, wie gesagt, oftmal auch offizielle Wege gäbe, welche sich manchmal auch leichter/problemloser nutzen lassen. :stupid:

GouJetir 11. Sep 2011 13:18

AW: Login Simulieren (WebBrowser)
 
Juhu geschafft ich werde zu einem Pro-Programmierer ;) Ne Spaß - Danke :)

Edit: Noch ne Frage: Weil ja meine Seite eigentlich für Dshini sein soll,hab ich jetzt ein Problem beim absenden.

Die Seite auf der der sich einloggen soll ist: http://www.dshini.net/de/login

Bei Username hab ich:
Delphi-Quellcode:
Webbrowser1.OleObject.document.forms.item(0).elements.item('signin[username]').value := Edit1.Text;
und bei Passwort:
Delphi-Quellcode:
Webbrowser1.OleObject.document.forms.item(0).elements.item('signin[password]').value := Edit2.Text;
Aber ich find den Login-Button nicht.

GouJetir 11. Sep 2011 16:22

AW: Login Simulieren (WebBrowser)
 
Weiss das keiner oder geht es garnicht?

API 11. Sep 2011 17:01

AW: Login Simulieren (WebBrowser)
 
Delphi-Quellcode:
Webbrowser1.OleObject.document.forms.item(1).elements.item('signin[username]').value := Edit1.Text;
Webbrowser1.OleObject.document.forms.item(1).elements.item('signin[password]').value := Edit2.Text;
Webbrowser1.OleObject.document.forms.item(1).Submit;
// oder: Webbrowser1.OleObject.document.forms.item(1).elements.item(3).click;
oder kürzer:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  OleObj: Variant;
begin
  OleObj := Webbrowser1.OleObject.document.forms.item(1);
  OleObj.elements.item('signin[username]').value := 'Edit1.Text';
  OleObj.elements.item('signin[password]').value := 'Edit2.Text';
  OleObj.Submit;
end;
oder "sicherer":

Delphi-Quellcode:
uses
  MSHTML;

procedure SetInputText(FormElement: IHTMLFormElement; ItemName, ItemText: string);
var
   field: IHTMLElement;
   inputField: IHTMLInputElement;
begin
   if Supports(FormElement.Item(ItemName,EmptyParam), IHTMLElement, field) then
   begin
     inputField := field as IHTMLInputElement;
     inputField.value := ItemText;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  htmlDoc2: IHTMLDocument2;
  allForms: IHTMLElementCollection;
  myForm: IHTMLFormElement;
begin
  if Supports(WebBrowser1.Document, IHTMLDocument2, htmlDoc2) then
  begin
    allForms := htmlDoc2.Forms;
    if allForms.length > 1 then
    begin
      myForm := allForms.Item(1, EmptyParam) as IHTMLFormElement;
      SetInputText(myForm, 'signin[username]','username...');
      SetInputText(myForm, 'signin[password]','password...');
      myForm.submit;
    end;
  end;
end;

GouJetir 11. Sep 2011 17:24

AW: Login Simulieren (WebBrowser)
 
Ah danke aber wieso kommt da jetzt in den Klammern eine (1) ?

wicht 11. Sep 2011 17:51

AW: Login Simulieren (WebBrowser)
 
Ohne den TWebbrowser zu kennen vermute ich, dass da eine 1 steht, weil es sich um die Zweite Form im Dokument handelt.

Ganz allgemeiner Tipp: Erstmal kleine Sachen versuchen und Tutorials durcharbeiten...

geskill 11. Sep 2011 19:40

AW: Login Simulieren (WebBrowser)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Exakt wicht, die Webseite hat 2 Loginmöglichkeiten. Oben rechts erscheint ein Fenster, wenn man mit der Maus draufklickt oder eben das Login-Formular in der Mitte.

Dieser Code sollte aber eigentlich auch funktionieren:
Delphi-Quellcode:
Webbrowser1.OleObject.document.forms.item(0).elements.item('signin[username]').value := Edit1.Text;
Webbrowser1.OleObject.document.forms.item(0).elements.item('signin[password]').value := Edit2.Text;
Webbrowser1.OleObject.document.forms.item(0).Submit;
Damit ihr euch hier nicht durch den Quellcode wühlt, möchte ich euch mal auf das Webdeveloper FF Plugin aufmerksam machen. Im Anhang ein Sceen wie man schnell und sauber an die Infos kommt.

So sieht man auch am schnellsten, wie sauber die Webseite gemacht wurde ich sag nur Max. Zeichen :roll:

Matze 12. Sep 2011 05:16

AW: Login Simulieren (WebBrowser)
 
Hier wurde meiner Meinung nach bereits viel zu viel geschrieben.
Ich möchte dir nichts unterstellen, aber die AGB von dshini sagen folgendes:
Zitat:

Deshalb ist es insbesondere unzulässig, im Wege automatisierter Prozesse die Schaffung von Belohnungspunkten künstlich herbeizuführen.
Momentan deutet alles darauf hin, dass du genau das verwirklichen möchtest. Aus diesem Grund werde ich das Thema vorsichtshalber schließen, denn einen Verstoß gegen die AGB unterstützen wir hier nicht.

Solltest du andere Gründe für das automatische Einlochen haben, kannst du dich gerne per PN an eines unserer Teammitglieder wenden und plausible Gründe nennen. Evtl. wird das Thema dann wieder eröffnet. Wenn nicht, bleibt es geschlossen.


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