vb.net Webbrowser Login - Button problem

  • VB.NET

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

    vb.net Webbrowser Login - Button problem

    Guden,

    Ich habe eine Software entwickelt,
    Sie ist so gut wie fertig, sie greift auf die Seite zu (freepanel.ts3.cloud/login.php)

    Einloggen/Ausloggen funktioniert soweit, nur auf ein Button lässt es sich nicht zu greifen, und das ist mein Problem warum ich nicht weiter komme ich habe schon mehrere varianten versucht aber es will einfach nicht funktionieren..

    Mein Button worauf ich zugreifen möchte:

    HTML-Quellcode

    1. <button type="submit" class="btn btn-primary">SAVE NEW NAME</button>


    Die Codes womit ich es schon versucht habe zuzugreifen

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById("text").InvokeMember("submit")
    2. WebBrowser1.Document.GetElementById("text").InvokeMember("serverName")
    3. WebBrowser1.Document.GetElementById("submit")
    4. WebBrowser1.Document.Forms(0).InvokeMember("serverName")
    5. WebBrowser1.Document.GetElementById("submit")
    6. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    7. WebBrowser1.Document.GetElementById("type").InvokeMember("submit")
    8. webbrowser1.Document.Getelementbyid("btn btn-primary").Invokemember("click")


    der Login der Seite hat wunderbar mit dem Code funktioniert:

    VB.NET-Quellcode

    1. 'EINLOGGEN
    2. WebBrowser1.Navigate("https://freepanel.ts3.cloud/login.php") 'vanir19329@slvlog.com
    3. Application.DoEvents()
    4. 'Username
    5. WebBrowser1.Document.GetElementById("email").InnerText = "XY" 'Textbox1
    6. 'Passwort
    7. WebBrowser1.Document.GetElementById("password").InnerText = "XY" 'Textbox2
    8. 'einlogbutton
    9. WebBrowser1.Document.Forms(0).InvokeMember("submit")


    Ich bin für jede Hilfe Dankbar
    LG getsha
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    Der Button hat keine ID, also musst du mit dem Klassen-Namen arbeiten.
    var e = document.getElementsByClassName("className");
    oder
    var e = someElement.getElementsByClassName("className");
    wenn also irgend ein Element wo der Button drauf ist eine ID hat, hohlste dieses Element ran, von diesem Element dann alle unteren mit dieser Klasse, so hast du dann weniger oder gar nur ein Element mit dieser Klasse. Wenn dann kein eindeutiges Ergebniss vorliegt, filtern, nach Type, im extremfall auch größe und mehr, du musst nur kreativ sein.
    Danke für eure antworten, aber "getElementsByClassName" gibt es nicht in VB.NET Sprache vielleicht in C#
    ich komm auch leider nicht weiter weil ich bisher immer nur mit "GetElementById" gearbeitet habe,
    alles funktioniert an meinem Tool nur dieser eine Button der keine ID hat den bekomm ich nicht hin, ich weiß auch nicht wo ich da drauf zugreifen soll
    Button zitat:

    HTML-Quellcode

    1. <button type="submit" class="btn btn-primary">SAVE NEW NAME</button>


    Wenn ich nur den Code verwenden für den Button

    VB.NET-Quellcode

    1. ​WebBrowser1.Document.Forms(0).InvokeMember("submit")

    da wird nur die Seite neu geladen und den Button tätigt er nicht.

    Vielleicht noch wer ne Ahnung davon wie ich weiter kommen könnte?!

    Lg
    Getsha
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    ohh cool danke für deine schnelle Antwort aber leider passiert da immer noch nichts habe den code verwendet wie sie meinten

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementsByTagName("btn btn-primary")

    und da drunter hatte ich es auch mit dem "submit" (

    VB.NET-Quellcode

    1. ​WebBrowser1.Document.Forms(0).InvokeMember("submit")
    )
    ausprobiert aber passiert nichts außer Seite neu laden.
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    Nein nein, nicht so, mach mal exakt so:

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementsByTagName("button")


    <Button> ist ein HTML-Tag.

    Dann solltest du alle Buttons in einem Array haben, iteriere(for i, for each) durch die Elemente und schaue ob ein ClassName Attribute da ist, das dem gesuchten gleicht.

    VB.NET-Quellcode

    1. dim className as string = element.GetAttribute("className")
    2. if classname.equals("")...

    Mach das am besten im DocumentCompleted Event, denn da ist die Seite geladen.

    VB.NET-Quellcode

    1. Dim elements() as HtmlElement = webBrowser1.Document.GetElementsByTagName("button")


    Mit einem loop durchiterieren(for i, oder for each) und bei jedem element wie ich oben schon zeigte, den "ClassName" Attribute hohlen und diesen vergleichen.

    For Each element As HtmlElement In elements
    if element ........
    ne

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Takafusa“ ()

    Wo ist der Loop? Hab oben noch einen Hinweis reineditiert.

    Edit @getsha

    Mein Fehler, du bekommst keinen Array, sodnern eine HTmlElementCollection. Weil meine Schuld hier C&P code.

    VB.NET-Quellcode

    1. Dim elements As HtmlElementCollection = webBrowser1.Document.GetElementsByTagName("button")
    2. For Each element As HtmlElement In elements
    3. MessageBox.Show(element.GetAttribute("classname"))
    4. Next

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Takafusa“ ()

    mit Loop unten eingefügt 20 Fehler ahhhhh

    /E
    langsam kein bock mehr keine Ahnung warum das ned funktionieren will
    aber vielen lieben dank für ihre zeit und Mühe, dass ist nicht selbst verständlich von ihnen.

    aber so wie es aussieht wird das nix, Ich könnte ihnen ja mal die Mappe zukommen lassen oder so.
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur

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

    In dem Fall hatte ich was falsches gepostet, war meine Schuld. Du kannst jetzt den jeweiligen classname vergleichen und wenn das stimmt.

    element.InvokeMember("click")

    Notfalls auch innerHTML vergleichen wenns nicht eindeutig ist.

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

    VB.NET-Quellcode

    1. Dim elements As HtmlElementCollection = webBrowser1.Document.GetElementsByTagName("button")
    2. For Each element As HtmlElement In elements
    3. MessageBox.Show(element.GetAttribute("classname"))
    4. element.InvokeMember("click")
    5. Next



    Also mit dem Code spuckt er mir jetzt merhmals eine Msgbox aus mit der Klasse von dem Button also

    HTML-Quellcode

    1. btn btn-primary

    ganzer HTML Code:

    HTML-Quellcode

    1. <button type="submit" class="btn btn-primary">SAVE NEW NAME</button>
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    Nachdem ich vom TE, die Projektmappe erhalten habe, konnte ich selbst probieren.

    VB.NET-Quellcode

    1. Dim elements As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("button")
    2. For Each element As HtmlElement In elements
    3. If element.InnerHtml.Equals("SAVE NEW NAME") Then
    4. element.InvokeMember("click")
    5. End If
    6. Next


    Hab wohl ein wenig zu oft geklickt, bekam eine Meldung "Stop flooding" sollte also gehen. Probier auch noch mal ob das übernommen wird.

    Wichtiger Tipp nebenbei, gib niemals deine Anmeldedaten raus, ich lösche das sofort wieder, aber manch einer tut sowas nicht.
    Begleiche deine Schuld in dem du mich mit du ansprichst. ^^ Bin zwar alt, fühle mich aber nicht so, komme mir beim "Sie" aber umso älter vor. 8o Hier im Forum sagen alle zu allen "Du". Und gib wirklich niemals wieder Logindaten raus, kompilier das auch nicht ein, jeder der weiss wie kann die wieder raus hohlen aus der exe(keine zauberei). Ich hab die Mappe mit den Daten bereits gelöscht. Solltest du auch beim dem Hoster löschen.
    Ok ja alles gut, es ist eh nur ein Free Acc aber ja Du hast ja recht, ja wenn das Projekt richtig fertig ist wie Du gesehen hast Design ist einfach nur hingeklatscht das werde ich auf jeden fall ändern, und wenn das Projekt Final ist werde ich es noch verschlüsseln damit man die .exe nicht einfach durchlesen kann.. Ahh echt cool jetzt kann ich endlich weiter machen, kurze frage kennst Du dich mit Java(Knuddels) aus?
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    Mit Java kenne ich mich aus, habe als noch Eclipse die IDE für Android-App entwicklung war mit java gearbeitet. Mag ich aber nicht besonders. Aber Knuddels kenne ich nicht. Kannst aber bei fragen dazu hier einen Thread aufmachen, hier sind mehrere, möglichweise kennt sich damit einer aus.

    Wegen Logindaten in der exe, da komm ich auch ran wenn du die exe obfuskierst. Ich nehm spezielle Tools und sehe das im Arbeitsspeicher, muss nicht deobfuskieren und decompilieren.