WebKit verwenden

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von FrozzenApple.

    WebKit verwenden

    Hi Leute

    Ich hab mal eine Frage bezüglich der WebKit-Engine.

    Wenn man das Standard-Webbrower-Control verwendet hat man ja die Möglichkeit mit folgenden Code eine Seite im Webbrowser fertig laden zu lassen und anschließend ein Formular auszufüllen:

    VB.NET-Quellcode

    1. Do While WebBrowser.ReadyState <> WebBrowserReadyState.Complete
    2. Application.DoEvents()
    3. Loop
    4. WebKitBrowser.Document.GetElementById("user").SetAttribute("value",My.Settings.Benutzername)
    5. WebKitBrowser.Document.GetElementById("password").SetAttribute("value",My.Settings.Passwort)
    6. WebKitBrowser.Document.GetElementById("password").Focus()
    7. SendKeys.Send("{ENTER}")



    Gibt es auch in der WebKit-Engine eine gleichwertige Möglichkeit dies umzusetzen, da es dort ja kein ReadyState-Event gibt?

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

    Aber mit dem DocumentCompleted-Event wird ja immer wenn eine Seite in dem Webbrowser-Control fertig geladen ist versucht, ein Formular auszufüllen.
    Dies kann ich aber nicht gebrauchen, da mehrer verschiedene Seiten durch einzelne Buttons in dem Control geladen wird.

    Zum Ausfüllen eines Webformulares soll es jedoch nur kommen, wenn auf einen einzigen bestimmten Button geklickt wird.
    Deshalb suche ich eine Alternative für den oben genannten Code.
    Mein aktueller Code lautet so:

    VB.NET-Quellcode

    1. Private Sub Login()Do While WebBrowser.ReadyState <> WebBrowserReadyState.Complete
    2. Application.DoEvents()
    3. Loop
    4. WebKitBrowser.Document.GetElementById("user").SetAttribute("value",My.Settings.Benutzername)
    5. WebKitBrowser.Document.GetElementById("password").SetAttribute("value",My.Settings.Passwort)
    6. WebKitBrowser.Document.GetElementById("password").Focus()
    7. SendKeys.Send("{ENTER}")
    8. End Sub


    Mit diesem ist lade ich einfach bei einem Buttonclick die Seite und anschließend diese Funktion:

    VB.NET-Quellcode

    1. WebKitBrowser.Navigate("http://www.xyz.com")Login()



    Wenn man zuerst die gesamte Seite überprüfen muss, wirkt sich dies auf die Ladezeiten aus.
    Da wird nichts verlangsamt:

    VB.NET-Quellcode

    1. Private Sub WebKitBrowser_DocumentCompleted(sender As Object, e As DocumentCompletedEventArgs) Handles WebKitBrowser.DocumentCompleted
    2. If e.Url.ToString = "http://www.xyz.com" Then
    3. WebKitBrowser.Document.GetElementById("user").SetAttribute("value",My.Settings.Benutzername)
    4. WebKitBrowser.Document.GetElementById("password").SetAttribute("value",My.Settings.Passwort)
    5. WebKitBrowser.Document.GetElementById("password").Focus()
    6. SendKeys.Send("{ENTER}")
    7. End If
    8. End Sub
    Super. Funktioniert perfekt. Danke

    Jetzt habe nur noch ein weiteres kleines Problem:
    Bei der WebKit-Engine handelt es sich ja um die gleiche Engine wie auch Google Chrome verwendet. Nun frage ich mich:

    Das Ausfüllen des Formulares klappt wunderbar, jedoch kann ich so oft ich will, auf den Login Button klicken, aber es funktioniert nicht. Also ich kann mich nicht einloggen.

    Wenn ich die Website aber in Google Chrome öffne, trage ich die Logindaten ein und drücke Enter und es wird sich eingeloggt.
    Woran kann das hier liegen?
    Ich könnte mir vorstellen, dass dafür Cookies oder Javascript vorausgesetzt werden, die die .Net-Engine nicht von Haus aus implementiert. Du könntest versuchen es selber zu machen, dazu kann ich dir aber leider nichts sagen.
    Vielleicht liegts aber auch an was ganz anderem, ich kann da quasi nur raten.