Webbrowser button klick ohne ID

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Agita.

    Webbrowser button klick ohne ID

    Hallo ich hab mal ne Frage Wie bekomm ich Das in einen Button von einer Website :
    <div class="arrow up login-required" onclick="$(this).vote(r.config.vote_hash, null, event)" role="button" aria-label="upvote" tabindex="0"></div>

    das ist der code von einen Button auf einer website
    wie bekomm ich das in einen Scirpt?

    ich habe es mit

    VB.NET-Quellcode

    1. webpageelement.InvokeMember
    probiert.
    Ich habe es mit einen andern Button hin bekommen der auch keine Id hatte
    das ist der code dafür gewesen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim allements As HtmlElementCollection = WebBrowser1.Document.All
    3. For Each webpageelement As HtmlElement In allements
    4. If webpageelement.GetAttribute("value") = "Login" Then
    5. WebBrowser1.Document.GetElementById("user").SetAttribute("value", TextBox1.Text)
    6. WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", TextBox2.Text)
    7. webpageelement.InvokeMember("click")
    8. End If
    9. Next
    10. End Sub


    MFG
    dome
    danke im voraus


    Ps: Ich will kein Vote beeinflussen ,jemanden schaden oder sonst irgendwas in diese Richtung.
    Bin einfach nur dabei VB zu lernen und probiere rum.
    gibt es denn mehrere von dieser art von button oder nur den einen ?
    bzw wenn es mehrere gibt, dann müssen die sich ja irgendwie unterscheiden. entweder zb durch eigene attribute wie "class", oder aber dadurch, dass sie zb unterschiedliche eltern-divs besitzen.
    es gibt 2 Buttons
    Upvote : <div class="arrow up login-required" onclick="$(this).vote(r.config.vote_hash, null, event)" role="button" aria-label="upvote" tabindex="0"></div>
    Down : <div class="arrow down login-required" onclick="$(this).vote(r.config.vote_hash, null, event)" role="button" aria-label="downvote" tabindex="0"></div>


    danke für deine Antwort;)
    dann hol dir alle divs, ...keine ahnung wie das jetz in vb geht, aber hat iwas mit "WebBrowser1.Document.All" zu tun. in js geht das so: document.getElementsByTagName("div")...

    durchlauf einma alle divs und schau nach dem attribut "class". wenn das dann "arrow up login-required" ist, haste doch dein element :)

    edit: so etwas ähnliches:

    VB.NET-Quellcode

    1. For Each div As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
    2. If div.GetAttribute("class") = "fdsf" Then
    3. div.InvokeMember("click")
    4. End If
    5. Next


    edit2: alles gute =O

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

    ich habe es mit ging aber nicht hab ich was falsch gemacht?:o

    VB.NET-Quellcode

    1. Dim allements As HtmlElementCollection = WebBrowser1.Document.All
    2. For Each div As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
    3. If div.GetAttribute("class") = "upvote" Then
    4. div.InvokeMember("click")
    5. End If Next


    danke für deine Antwort habe sie erst heute gesehen ^^

    VB.NET-Quellcode

    1. If div.GetAttribute("aria-label") = "upvote" Then

    musst ausprobieren, ob er auch das custom attribut lesen kann. wenn ja dann ists easy.
    wenn du nach "class" suchst musst du den ganzen class-string benutzen. einziges problem was auftauchen könnte is, dass der webbrowser (wie zb mozilla auch hin und wieder) die reihenfolge der class-namen ändert.
    Die Variable allelements benutzt du nicht, kannst sie also weg lassen.

    Du püfst die Divs auf eine Klasse namens upvote aus deinem geposteten HTML Quelltext lässt sich aber herauslesen das kein Div eine solche Klasse besitzt, heißt du musst schon die richtige Klasse dort eintragen.

    <div class="arrow up login-required" onclick="$(this).vote(r.config.vote_hash, null, event)" role="button" aria-label="upvote" tabindex="0"></div>
    <div class="arrow down login-required" onclick="$(this).vote(r.config.vote_hash, null, event)" role="button" aria-label="downvote" tabindex="0"></div>

    Und nach dem "Klick" würde ich die Schleife beenden, nicht das noch ein Element gefunden wird mit der Klasse.

    Exit For

    @Agita: FF ändert nicht die Reihenfolge, im Quelltext sind sie genauso wie sie sein sollen. Höchstens FireBug ordnet sie neu an, aber das ja egal. Zudem sieht man ja hier dass das WebControl genutzt wird, was ja dem IE entspricht ;)
    danke... habe es mit probiert

    VB.NET-Quellcode

    1. Dim HtmlElementCollection = WebBrowser1.Document.All
    2. For Each div As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
    3. If div.GetAttribute("arrow up login-required") = "upvote" Then
    4. div.InvokeMember("click")
    5. Exit For
    6. End If
    7. Next


    das "upvote" ist glaube ich falsch
    aber durch was ersetz ich das?


    Ich suche ja Zeile ab die mit DIV startet ab

    VB.NET-Quellcode

    1. If div.GetAttribute("das ist der typ?") = "und das der inhalt von dem typ oder?"



    Also müsste es ja so stimmen:


    VB.NET-Quellcode

    1. [/size][size=10]Dim HtmlElementCollection = WebBrowser1.Document.All[/size]
    2. For Each div As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
    3. If div.GetAttribute("class") = "arrow up login-required" Then
    4. div.InvokeMember("click")
    5. End If
    6. Exit for
    7. Next

    leider ging das nicht hab ich noch was falsch gemacht?
    ><
    danke ^-^

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

    Weißt du was Attribute sind?

    <div class="hallo">

    class ist ein Attribut und hallo der Wert dieses Attributes.

    Ist klar das es nicht funktioniert, denn deine Divs haben kein Attribut was "arrow up login-required" heißt sondern nur ein Attribut "class" welche den Wert "arrow up login-required" haben ;)

    Dodo schrieb:

    Höchstens FireBug ordnet sie neu an, aber das ja egal

    you got me :P

    aber mir is noch was eingefallen. und zwar ist es auch möglich anhand des index des elements an das element selbst zu kommen.
    wenn beide der buttons in dem selben eltern-div sind und es einfacher ist auf das eltern-div zuzugreifen (zb weil es eine id hat) dann kann man auch folgendes machen:
    document.getElementById("parentDiv").getElementsByTagName("div")[0];
    dann hätte man das erste element in dem eltern-div. allerdings weiß ick nich ob .net so eine abfrage auch iwie unterstützt

    generell gibts viele wege. das einzige wonach man suchen muss ist nach etwas, was ein element eindeutig identifiziert. sei es die position (in der dom-hierarchie), die id, classname, oder gar durch style.