Login auf Webseite funktioniert nicht.

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von RaYder04.

    Login auf Webseite funktioniert nicht.

    Hey, das ist mein erster Post mit meiner ersten Frage hier :)
    Ich will eine kleine Login-Funktion schreiben.
    Wie man das macht weiß ich, wird ja in jedem forum 10 mal besprochen.
    Aber mit meinem Code klickt das Programm nicht auf den submit button.
    Seite: pennergame.de/login/
    kann es evtl. daran liegen, dass 2 Formulare existieren mit den gleichen IDs?
    Mein Ausschnitts-Code:

    VB.NET-Quellcode

    1. 'Einloggen
    2. WebBrowser1.Navigate("http://www.pennergame.de/login/")
    3. Application.DoEvents()
    4. 'Username
    5. WebBrowser1.Document.GetElementById("login_username").InnerText = "xxxx"
    6. 'Passwort
    7. WebBrowser1.Document.GetElementById("password").InnerText = "yyyyy"
    8. 'einlogbutton
    9. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    Wie kommst du auch 2 WebBrowser @user44?? Und Submit ist auch richtig, weil hier wird das Event Submit ausgeführt und nicht irgendein Button der eine ID hat. Genauso wie InvokeMember("click") sein kann, wenn man das Click Event eines HTML Elements auslösen will.

    Was dein Problem ist einfach, dass der Browser die Seite noch nicht geladen hat, wundert mich das bei all den Beispielen das übersehen hast.

    Also entweder machste ein Loop bis das DocumentState = True (oder so ähnlich) ist das aber schlecht weil solange deine Applikation "hängt". Besser ist zuerst auf die Seite navigieren und dann im Event DocumentComplete die Formularfelder ausfüllen lassen.
    mhh,
    funktioniert leider immernoch nicht.
    habe mal was geändert. kann jmd. das hier kurz testen? da kommt eine warnmeldung

    VB.NET-Quellcode

    1. WebBrowser1.Navigate("http://www.pennergame.de/logout/")
    2. Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    3. Application.DoEvents()
    4. Loop
    5. VerlaufsBox.Text &= "Einloggen..."
    6. ToolStripStatusLabel1.Text = "Einloggen..."
    7. 'Username
    8. WebBrowser1.Document.GetElementById("login_username").InnerText = "cxxx"
    9. 'Passwort
    10. WebBrowser1.Document.GetElementById("password").InnerText = "yyyyy"
    11. 'einlogbutton
    12. WebBrowser1.Document.Forms(0).InvokeMember("login")

    danke :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RaYder04“ ()

    bei

    VB.NET-Quellcode

    1. Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    kommt
    Auf das verworfene Objekt kann nicht zugegriffen werden. Objektname: "WebBrowser".
    also wenn ich das hier weglasse:

    VB.NET-Quellcode

    1. Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    2. Application.DoEvents()
    3. Loop

    dann trägt das proggy name und passwort ein. drückt aber nicht auf den button
    Versuch es mal so:


    'Einloggen
    WebBrowser1.Navigate("http://www.pennergame.de/login/")
    Application.DoEvents()
    'Username
    WebBrowser1.Document.GetElementById("login_username").InnerText = "xxxx"
    'Passwort
    WebBrowser1.Document.GetElementById("password").InnerText = "yyyyy"
    'einlogbutton
    WebBrowser1.Document.Forms(1).InvokeMember("submit")


    Mfg Kevin.
    Weil es 2 Forms auf der Seite gibt, aber die Form hat doch einen namen und eine ID, wieso also über das FormArray??

    müsste sowas nicht auch funzen:

    WebBrowser1.Document.GetElementById("formReg").InvokeMember("submit")

    oder

    WebBrowser1.Document.GetElementById("formReg").submit()
    mhh, hilft alles nichts

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById("formReg").submit()

    => "submit" ist kein Member von "System.Windows.Forms.HtmlElement"

    Hier mal meine funktion:
    er loggt sich ein und sucht sich user aus der highscore raus*

    VB.NET-Quellcode

    1. Sub FindUser(ByVal seite As Integer, ByVal min As Integer, ByVal max As Integer)
    2. 'Einloggen
    3. ToolStripStatusLabel1.Text = "Ausloggen..."
    4. VerlaufsBox.Text &= "Ausloggen..."
    5. WebBrowser1.Navigate("http://www.pennergame.de/logout/")
    6. VerlaufsBox.Text &= "Einloggen...(" & "{Username}" & ")" & vbNewLine
    7. ToolStripStatusLabel1.Text = "Einloggen..."
    8. 'Einloggen
    9. WebBrowser1.Navigate("http://www.pennergame.de/login/")
    10. Application.DoEvents()
    11. 'Username
    12. WebBrowser1.Document.GetElementById("login_username").InnerText = "xxxx"
    13. 'Passwort
    14. WebBrowser1.Document.GetElementById("password").InnerText = "yyyyy"
    15. 'einlogbutton
    16. WebBrowser1.Document.GetElementById("formReg").submit()
    17. ToolStripStatusLabel1.Text = "Du wurdest eingeloggt..."
    18. End Sub
    nein, es tut sich rein garnichts :(
    da muss i-wo ein banaler fehler sein.
    ich bin blutiger anfänger in vb. worauf müssen anfänger achten?

    bei webseiten mit nur einer form gehts problemlos :(


    EDIT: oh, hab grad bemerkt, dass ich im eigenschaftenfenster vom webbrowser "allownavigation" auf false gesetzt hatte....
    dummheit tut weh...aber richtig!
    gibs einen befehl, sodass der user des programms trotzdem nicht auf buttons klicken kann?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RaYder04“ ()

    Ja dein banaler Fehler ist das einfach nicht vernünftig rumprobierst. Es wurde alles genannt und bei mir funktioniert es auf anhieb

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    3. 'Username
    4. WebBrowser1.Document.GetElementById("login_username").InnerText = "xxxx"
    5. 'Passwort
    6. WebBrowser1.Document.GetElementById("password").InnerText = "yyyyy"
    7. WebBrowser1.Document.GetElementById("formReg").InvokeMember("submit")
    8. End Sub
    9. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    10. WebBrowser1.Navigate("http://www.pennergame.de/login/")
    11. End Sub
    12. End Class


    Aber Achtung, du solltest noch eine Variable auf True zu setzten nachdem man eingeloggt ist, ansonsten wird jedesmal wenn die Seite geladen wurde versucht sich einzuloggen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. WebBrowser1.Navigate("http://www.pennergame.de/")
    3. End Sub
    4. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    5. If WebBrowser1.ReadyState Then
    6. If WebBrowser1.Url.AbsoluteUri = "http://www.pennergame.de/" Then
    7. WebBrowser1.Document.GetElementById("login_username").SetAttribute("value", "NAME")
    8. WebBrowser1.Document.GetElementById("password").SetAttribute("value", "PASSWORT")
    9. 'WebBrowser1.Document.Forms(0).InvokeMember("submit")
    10. WebBrowser1.Document.GetElementById("formReg").InvokeMember("submit")
    11. End If
    12. End If
    13. End Sub

    Hab mich etwas vertan
    @tsuyo: fast gleicher Code wie ich, aber wozu ReadyState überprüfen? Das doch doppelt da das Event ja erst geraised wird wenn das Dokument geladen wurde. In der IF Bedingung kann man höchstens das Flag setzten, dass der Code nur einmal ausgeführt wird zum einloggen und nicht bei jedem Laden.
    Stehe leider wieder vor einem Problem...
    Es soll geprüft werden, ob eingeloggt wurde.
    der code versteht sich von allene, hoffe ich :P

    das problem: es geht zu schnell.
    wenn man erst die msgbox anzeigen lässt, dann funktioniert es.
    sleep-funktionen helfen i-wie auch nichts.

    VB.NET-Quellcode

    1. 'Einloggen
    2. ToolStripStatusLabel1.Text = "Vorbereiten..."
    3. VerlaufsBox.Text &= "===> Vorbereiten..."
    4. Application.DoEvents()
    5. ToolStripProgressBar1.Value = 40
    6. Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    7. Application.DoEvents()
    8. Loop
    9. VerlaufsBox.Text &= " Log in as " & UserName
    10. ToolStripStatusLabel1.Text = "Einloggen..."
    11. WebBrowser1.Navigate("http://www.pennergame.de/overview/")
    12. ToolStripProgressBar1.Value = 70
    13. Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
    14. Application.DoEvents()
    15. Loop
    16. 'Username
    17. If Not WebBrowser1.Document.GetElementById("login_username") Is Nothing Then
    18. WebBrowser1.Document.GetElementById("login_username").InnerText = UserName
    19. End If
    20. 'Passwort
    21. If Not WebBrowser1.Document.GetElementById("password") Is Nothing Then
    22. WebBrowser1.Document.GetElementById("password").InnerText = UserNamePass
    23. End If
    24. ' einloggen
    25. ToolStripProgressBar1.Value = 100
    26. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    27. Application.DoEvents()
    28. ' msgbox("test")
    29. If WebBrowser1.Url.ToString() = "http://www.pennergame.de/login/check/" Then
    30. anzahlLogInTrys = anzahlLogInTrys + 1
    31. ToolStripStatusLabel1.Text = "Login gescheiter. Nochmal versuchen..."
    32. VerlaufsBox.Text &= " Error ( the " & anzahlLogInTrys & "/5 Time! )" & vbNewLine
    33. ToolStripProgressBar1.Value = 0
    34. If anzahlLogInTrys = 5 Then
    35. MsgBox("Der Account konnte nicht eingeloggt werden. ( 5 Trys ) Bitte erneut versuchen!")
    36. End
    37. End If
    38. Einloggen(anzahlLogInTrys)
    39. Else
    40. ToolStripStatusLabel1.Text = "Du wurdest eingeloggt..."
    41. VerlaufsBox.Text &= " Eingeloggt..." & vbNewLine
    42. ToolStripProgressBar1.Value = 0
    43. End If


    Gibt es da eine lösung?