ID.lose Web Fomulare ausfüllen ?

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Mokki.

    ID.lose Web Fomulare ausfüllen ?

    Hallo alle zusammen.
    Ich habe ein Problem, wobei mir bis jetzt niemand helfen konnte. Weder die SuFu noch google oder die Semper Video TUT.

    Undzwar sieht es so aus, dass ich ein kleines Programm schreibe, dass Online-Web-Formulare ausfüllt(Vergleichend mit RoboForm).
    Bis jetzt funktioniert das Programm leider nur mit Web-Formulare DIE eine Feste-'ID' haben. Das ganze spielt sich in einem Web-Browser mit einer IE-Engine (Standard im VB Toolkit)

    Beispiel:

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById("meinelieblingsfabe").SetAttribute("value", txtBoxXXX.Text)


    Der HTML-Code des besagten Feldes sieht so aus:

    HTML-Quellcode

    1. <input autocapitalize="on" class="r s" name="favcolor" value="" type="text">


    Nun ist das Problem, dass ich leider hier feststecke und nicht mehr weiterkomme. Es fühlt sich solangsam trostlos und trocken an.
    Daher schreibe ich diesen Post, da ich in der Vergangenheit meistens Hilfe aus der SuFu bekommen habe - hoffe ich nun auf mein Thema.
    Ich hoffe, dass ihr mir vielleicht dabei helfen könnt - mein Problem zu lösen bzw. mir Lösungsbausteine präsentieren könntet.

    Desweiteren wünsche ich euch einen angenehmen Samstach!
    Wow. Auf so eine schnelle Antwort habe ich nicht gerechnet.
    Das hört sich doch viel versprechend an.
    Jedoch muss ich ehrlich zugeben, dass ich nicht genau weis wie das Funktioniert und ich das realisieren kann.
    Ich habe erst vor kurzen wieder angefangen wieder zu Programmieren. Die Lust hat mich mich wieder gepackt :rolleyes:









    Vielleicht gibt es ja etwas in der SuFu ... psscht
    Es gibt Webbrowser.Document.Forms eine List mit allen Forms im Dokument.
    Und jedes Item hat das Attribut Children auch eine List.
    Also loopst du am besten durch beide Lists und suchst nach dem Children was als Name favcolor hat.
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Oh ok also ich ging davon aus das du da eine Zahl einträgst, aber damit du aber nicht die ganze Zeit suchen muss ich hab hier nen 100% funktionierenden Code:

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. For i = 0 To WebBrowser1.Document.Forms.Count - 1
    3. For x = 0 To WebBrowser1.Document.Forms.Item(i).Children.Count - 1
    4. If WebBrowser1.Document.Forms.Item(i).Children.Item(x).Name = "favcolor" Then
    5. WebBrowser1.Document.Forms.Item(i).Children.Item(x).SetAttribute("value", "hallo")
    6. End If
    7. Next
    8. Next
    9. End Sub
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Naja ich schreibt des deshalb darein weil ich mir dann sicher sein kann das die Webseite geladen hat. Aber du kannst natürlich in dem Butten abfragen ob die Webseite geladen hat bevor du es ausführst.
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ich bin etwas verwirrt ... Also wenn ich es jetzt richtig verstanden habe muss ich :

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. WebBrowser1.Document.GetElementById("favcolor").SetAttribute("value", TextBox1.Text)
    3. End Sub
    4. Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. WebBrowser1.Document.GetElementById("favcolor").SetAttribute("value", TextBox1.Text)
    8. For i = 0 To WebBrowser1.Document.Forms.Count - 1
    9. For x = 0 To WebBrowser1.Document.Forms.Item(i).Children.Count - 1
    10. If WebBrowser1.Document.Forms.Item(i).Children.Item(x).Name = "favcolor" Then
    11. WebBrowser1.Document.Forms.Item(i).Children.Item(x).SetAttribute("value", TextBox1.Text)
    12. End If
    13. Next
    14. Next
    15. End Sub

    Nein du brauchst nur den Code:

    VB.NET-Quellcode

    1. For i = 0 To WebBrowser1.Document.Forms.Count - 1
    2. For x = 0 To WebBrowser1.Document.Forms.Item(i).Children.Count - 1
    3. If WebBrowser1.Document.Forms.Item(i).Children.Item(x).Name = "favcolor" Then
    4. WebBrowser1.Document.Forms.Item(i).Children.Item(x).SetAttribute("value", "hallo")
    5. End If
    6. Next
    7. Next

    Den kannst du auch einfach in deine Button1_Click reinsetzen und es funktioniert alles. Des Problem ist nur wenn die Webseite noch net geladen hat und der Benutzer drückt auf den Button wird der Wert natürlich nicht eingesetzt.
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Okay. Also, wenn ich es richtig verstanden habe - kann ich es einfach so in den Button_Click einsetzten.
    Und das "hallo" ist dann das Einfügen des Textes, oder mache ich schon wieder etwas falsch ?


    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. For i = 0 To WebBrowser1.Document.Forms.Count - 1
    3. For x = 0 To WebBrowser1.Document.Forms.Item(i).Children.Count - 1
    4. If WebBrowser1.Document.Forms.Item(i).Children.Item(x).Name = "favcolor" Then
    5. WebBrowser1.Document.Forms.Item(i).Children.Item(x).SetAttribute("value", TextBox1.Text)
    6. End If
    7. Next
    8. Next
    9. End Sub
    10. Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    11. End Sub
    12. Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    13. End Sub

    Hm. Ich habe für den Browser in den Eigenschaften die URL eingegeben, so dass die Seite beim Startet des Programmes sofort aufgerufen wird.
    Wenn ich jetzt meinen Text in die Textbox eingebe und auf den Button klicke, bleibt das Eingabefeld, dass 'wir' im Browser versuchen auszufüllen, leider immer noch leer .


    EDIT : :)
    Ich Danke euch. Es hat mir genau die gewünschte Lösung gebracht. Vielen dank für eure Unterstüzung und einen besonderen dank an dich Mokki. Du hast mir einen Meilenstein geschenkt :)

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

    Es funktioniert alles prima. Ich bin über glücklich :)

    Eine Frage habe ich da noch. Sozusagen, als abschließende Lektion.
    Die lösche ich die Cookies aus dem Webbrowser. Ich kenne die Methoden:

    VB.NET-Quellcode

    1. System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 8")
    2. System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 2")
    3. System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 1")


    Diese funktionieren leider irgendwie nicht. Die Cookies werden nicht gelöscht.
    Ich möchte gerne, dass die Cookies einfach mit einem Buttonklick-Lösche-
    Hast du vielleicht noch eine abschließende Idee ?
    Versuchs erstmal nur indem du in nem testprogramm die Daten löscht und den Browser davor per Hand schließt. Und tausch mal Zeile 2 mit 3 ich glaub es ist besser erst die History und dann die Cookies zu löschen.
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread