Hilfe bei automatischen Link klicken (href)

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von werna_werna.

    Hilfe bei automatischen Link klicken (href)

    Hi!
    Möchte von folgendem Html-Code den ersten Link automatisch anklicken lassen.Kann es ja nicht über die ID ansprechen, da diese bei jeden neuladen der Seite verschieden ist. Durch die Suchfunktion habe ich zwar herausgefunden, wie man die Links herausfiltern kann, ich möchte aber nur auf den ersten klicken.

    HTML-Quellcode

    1. <div id="heads">
    2. <a href="/com4ik"><img alt="" class="head" id="face_5039312" src="http://img6.ask.fm/assets/055/177/604/thumb_tiny/____0649.jpg" /></a>
    3. <a href="/TOMASGOMEZ"><img alt="" class="head" id="face_3485956" src="http://img2.ask.fm/assets/105/810/426/thumb_tiny/774256_549032728442496_1252413344_o.jpg" /></a>
    4. <a href="/NesrinnnYldrm"><img alt="" class="head" id="face_42965007" src="http://img7.ask.fm/assets/118/027/300/thumb_tiny/419175_214705512008604_608216578_n.jpg" /></a>
    5. <a href="/essragndm"><img alt="" class="head" id="face_44335884" src="http://img7.ask.fm/assets/126/467/426/thumb_tiny/foto_raf0173_001.jpg" /></a>
    6. <a href="/CelioRezende"><img alt="" class="head" id="face_11446439" src="http://img4.ask.fm/assets/105/461/902/thumb_tiny/101_1292.jpg" /></a>
    7. <a href="/id191741177"><img alt="" class="head" id="face_35501974" src="http://img1.ask.fm/assets/122/307/087/thumb_tiny/__b_0401_001.jpg" /></a>
    8. <a href="/ChristianNepo"><img alt="" class="head" id="face_43233942" src="http://img1.ask.fm/assets/127/240/308/thumb_tiny/image.jpg" /></a>
    9. <a href="/oktyabrenok"><img alt="" class="head" id="face_45629820" src="http://img6.ask.fm/assets/126/332/123/thumb_tiny/jnwoq8jvoma.jpg" /></a>
    10. <a href="/lucasburk"><img alt="" class="head" id="face_42069453" src="http://img1.ask.fm/assets/115/356/555/thumb_tiny/305523_10150658430837111_1450549756_n.jpg" /></a>
    11. <a href="/MsLoveable"><img alt="" class="head" id="face_39727081" src="http://img5.ask.fm/assets/109/613/852/thumb_tiny/image.jpg" /></a>
    12. <a href="/DeboZambrano"><img alt="" class="head" id="face_5981760" src="http://img0.ask.fm/assets/033/560/663/thumb_tiny/foto0279_001.jpg" /></a>
    13. <a href="/masyulechka"><img alt="" class="head" id="face_1257698" src="http://img0.ask.fm/assets/125/027/807/thumb_tiny/pppaghetb1i.jpg" /></a>
    14. <a href="/LePotterhead"><img alt="" class="head" id="face_25358446" src="http://img1.ask.fm/assets/063/386/691/thumb_tiny/photo2860.jpg" /></a>
    15. </div>
    Willkommen im Forum. :thumbup:

    werna_werna schrieb:

    Suchfunktion habe ich zwar herausgefunden, wie man die Links herausfiltern kann, ich möchte aber nur auf den ersten klicken.
    Wie filterst Du denn die Links raus?
    Wie speicherst Du sie zwischen?
    Von da ist es nur noch ein Katzensprung, den ersten anzuklicken. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nimm das Element, das die ID "heads" hat, nimm davon alle Unterelemente und nimm davon das erste.
    Könnte so in der Richtung aussehen: GetElementByID("heads").GetSubElements().First

    Edit: Ja, wenn Du sie suchen kannst, sollte es eigentlich kein Problem sein, von der Suchfunktion auf das Anklicken zu kommen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Also bis jetzt habe ich die Links so ausgelesen

    VB.NET-Quellcode

    1. Dim i As Integer = 0
    2. For Each Link As HtmlElement In WebBrowser1.Document.Links
    3. ListBox1.Items.Add(i & ". " & Link.InnerHtml & ": " & Link.OuterHtml)
    4. i += 1
    5. Next

    Wird dann in der Linkbox gespeichert... das Problem ist jetzt das diese noch ungefiltert sind...

    VB.NET-Quellcode

    1. GetElementByID("heads").GetSubElements().First


    GetSubElements().First erkennt es bei mir nicht und ich finde auch nichts entsprechendes...

    werna_werna schrieb:

    GetSubElements().First erkennt es bei mir nicht

    Niko Ortner schrieb:

    Könnte so in der Richtung aussehen

    Nicht einfach kopieren, sondern verstehen.
    Es muss eine Möglichkeit geben, von einem Element die untergeordneten Elemente zu bekommen. Die von mir genannte Funktion war geraten, weil mir der Name logisch erschienen ist.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Vielleicht so:

    VB.NET-Quellcode

    1. Dim ll = Me.WebBrowser1.Document.GetElementById("heads")
    2. Dim l1 = ll.All.Item(0)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Niko Ortner schrieb:


    Nicht einfach kopieren, sondern verstehen.
    Es muss eine Möglichkeit geben, von einem Element die untergeordneten Elemente zu bekommen. Die von mir genannte Funktion war geraten, weil mir der Name logisch erschienen ist.


    Genau nach so einer Möglichkeit suche ich ja, finde aber keine.

    VB.NET-Quellcode

    1. Dim 11= Me.WebBrowser1.Document.GetElementById("heads")
    2. Dim 11 = 11.All.Item(0)


    Und wie klicke ich da dann drauf ?!?
    Vorsicht mit dem Code. Du hast ihn wohl noch nicht probiert, denn er darf so nicht kompilieren. Bezeichner müsen mit einem Buchstaben oder einem Unterstricht beginnen. Zahlen am Anfang sind nicht erlaubt.
    (@RodFromGermany: Ein verständlicherer Name wäre hier nicht schlecht gewesen)
    Nenne die erste Variable mal HeadsElement und die zweite FirstLink.

    Klicke mit der rechten Maustaste auf die FirstLink-Variable und klicke dann auf "Gehe zu Definition". Dann öffnet sich der ObjectBrowser und da drin kann man super nach Methoden suchen. Schau mal, ob Du da etwas passendes findest (suche speziell nach Methoden, die etwas mit "Click" zu tun haben).
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @werna_werna: Ja, in diesem Fall passt "Gehe zu Typendefinition". Gut erkannt :thumbup:
    Im ObjectBrowser siehst Du dann, dass es ein "HtmlElement" ist.
    Und jetzt kommt Google ins Spiel.
    Ich habe bei Google ".net htmlelement click" eingegeben. ".net", weil es sich hier ums .NET-Framework handelt. "htmlelement", weil wegen HtmlElement. Und "click", weil wir es klicken wollen.
    Gleich das erste Suchergebnis ( stackoverflow.com/questions/53…matially-with-htmlelement ) zeigt die Lösung.
    Wie Du auf der Seite sehen kannst (und schau Dir die Seite wirklich an, damit Du es siehst und hoffentlich verstehst), wird die InvokeMember-Methode erwähnt. Der wird als Argument der String "click" übergeben. Und jetzt sollte eigentlich alles logisch sein:

    VB.NET-Quellcode

    1. DasLinkHtmlElement.InvokeMember("click")


    So findet man bei Google viele Sachen. Einfach ".net Womit WasTun" suchen. Also Womit ist in unserem Fall die HtmlElement-Klasse und WasTun ist bei uns klicken. Also ".net htmlelement click".
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Danke funktioniert nun, habe jetzt aber folgendes Problem: möchte nach drücken eines Buttons drei Routinen hintereinander im Browser ablaufen lassen... dazu frage ich den Browser.ReadyState ab...
    Vor der 3. Routine tritt aber immer ein Fehler auf, da die Website in Wirklchkeit nicht voll geladen ist... Kann es sein das der ReadyState zufrüh zurückgibt ??

    VB.NET-Quellcode

    1. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    2. WebBrowser1.Navigate("http://www.seite.seite)
    3. Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
    4. Application.DoEvents()
    5. Loop
    6. Dim HeadsElement = Me.WebBrowser1.Document.GetElementById("heads")
    7. Dim Firstlink = HeadsElement.All.Item(0)
    8. Firstlink.InvokeMember("click")
    9. Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
    10. Application.DoEvents()
    11. Loop
    12. WebBrowser1.Document.GetElementById("profile-input").InnerText = TextBox2.Text
    13. WebBrowser1.Document.Forms(1).InvokeMember("submit")
    14. End Sub


    Edit habs hinbekommen :) stackoverflow.com/questions/32…mpletely-loaded-in-vb-net

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

    Niko Ortner schrieb:

    Bezeichner müsen mit einem Buchstaben oder einem Unterstricht beginnen.
    Ich wundere mich gerade sehr, denn ich hatte da ein "LL" in Kleinbuchstaben stehen, dass da jetzt eine "11" (Eins-Eins) drin steht, ist mit unklar.
    Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: 1 und l sind beim Übefrfliegen sehr ähnlich. Es kann sein, dass werna_werna das einfach falsch gelesen hat.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Es kann sein, dass werna_werna das einfach falsch gelesen hat.
    Jou, so isses. In meinem Post wird es richtig angezeigt.
    Das beweist allerdings, dass @werna_werna: nicht C&P gemacht hat. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!