Alle Links eines bestimmten DIV-Tags anklicken

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Visual Basic-Quellcode

    1. Private Sub Links_holen()
    2. Dim link As HtmlElement, value As String
    3. Dim links As HtmlElementCollection = WebBrowser1.Document.Links
    4. For Each link In links
    5. value = link.GetAttribute("href")
    6. If value.Contains("change_please") Then link.InvokeMember("click")
    7. Next
    8. End Sub

    Irgendwie passiert da garnix :?:
    Ich bin einfach zu blöd für VB :(
    Dann warte mit dem anklicken des neuen Links, bis er den anderen sauber annavigiert hat:

    Setze eine Variable oben in die Forms:

    VB.NET-Quellcode

    1. Private _isBusy as Boolean

    Im Webbrowser.DocumentCompleted Event setzt Du

    VB.NET-Quellcode

    1. _isBusy=false


    Und dazu naoch eine Methode:

    VB.NET-Quellcode

    1. Public Shared Sub waitComplete()
    2. While _isBusy
    3. Application.DoEvents()
    4. End While
    5. End Sub

    Und wartest nach dem InvokeMember mit dem Aufruf waitComplete()

    VB.NET-Quellcode

    1. Private Sub Links_holen()
    2. Dim link As HtmlElement, value As String
    3. dim doc as HTMLCollection=WebBrowser1.Document
    4. Dim links As HtmlElementCollection = doc.Links
    5. For Each link In links
    6. value = link.GetAttribute("href")
    7. _isBusy=true
    8. If value.Contains("change_please") Then link.InvokeMember("click")
    9. waitComplete()
    10. Next
    11. End Sub


    Hoffe so aus dem Kopf ist das auch richtig

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

    Ok, also er bringt zwar keinen Fehler, aber dafür macht er auch nix ^^
    Hier mal mein kompletter Code: (meine "einfallsreichen" Kommentare einfach ignorieren :D )

    Visual Basic-Quellcode

    1. Public Class Form1
    2. Private _isBusy As Boolean
    3. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    4. Me.Text = "Spendenautomat v1.7 ~"
    5. '<unsichtbar machen!>
    6. Me.Button2.Visible = False
    7. Me.link_txt.Visible = False
    8. Me.link_submit.Visible = False
    9. Me.ProgressBar1.Visible = False
    10. Me.WebBrowser1.Navigate("http://www.spenden-muenchen.de")
    11. Application.DoEvents()
    12. Me.WebBrowser1.Visible = False
    13. '</unsichtbar machen!>
    14. End Sub
    15. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    16. Me.link_txt.Visible = True
    17. Me.Button1.Enabled = False
    18. Me.Button1.BackColor = Color.AntiqueWhite
    19. End Sub
    20. Private Sub link_txt_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles link_txt.TextChanged
    21. If Len(Trim(link_txt.Text)) > 45 Then
    22. link_submit.Visible = True
    23. End If
    24. End Sub
    25. Private Sub link_submit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles link_submit.Click
    26. Me.link_txt.Enabled = False
    27. Me.link_submit.Enabled = False
    28. Me.link_submit.BackColor = Color.AntiqueWhite
    29. WebBrowser1.Document.GetElementById("link").InnerText = Me.link_txt.Text
    30. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    31. Me.Button2.Visible = True
    32. Me.Button2.Enabled = False
    33. Me.Button2.BackColor = Color.AntiqueWhite
    34. Me.WebBrowser1.Visible = True
    35. Me.ProgressBar1.Visible = True
    36. 'AM BESTEN BISSCHEN WARTEN (TIMER)!
    37. Me.Button2.Visible = True
    38. Me.Button2.Enabled = True
    39. Me.Button2.BackColor = Color.LightGreen
    40. End Sub
    41. Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
    42. Me.Button2.Enabled = False
    43. Me.Button2.BackColor = Color.AntiqueWhite
    44. '####################-> BOT WIRD GESTARTET <-####################
    45. Links_holen()
    46. '################################################################
    47. End Sub
    48. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    49. _isBusy = False
    50. End Sub
    51. Private Sub WebBrowser1_ProgressChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
    52. Dim d, t As Integer
    53. d = e.CurrentProgress
    54. t = e.MaximumProgress
    55. If d <= 0 Then
    56. ProgressBar1.Value = 0
    57. Else
    58. ProgressBar1.Value = Math.Min(ProgressBar1.Maximum, Convert.ToInt32(Math.Floor(ProgressBar1.Maximum * (d / t))))
    59. End If
    60. End Sub
    61. Private Sub Links_holen()
    62. Dim link As HtmlElement, value As String
    63. Dim links As HtmlElementCollection = WebBrowser1.Document.Links
    64. For Each link In links
    65. value = link.GetAttribute("href")
    66. _isBusy = True
    67. If value.Contains("change_please") Then link.InvokeMember("click")
    68. waitComplete()
    69. Next
    70. End Sub
    71. Private Sub waitComplete()
    72. While _isBusy
    73. Application.DoEvents()
    74. End While
    75. End Sub
    76. End Class


    Vielleicht hat ja jemand noch die Lust und die Zeit, mir zu helfen :)
    LG DiDi
    ERLEDIGT!!! :D

    Hab einfach anstelle von:

    Visual Basic-Quellcode

    1. If value.Contains("change_please") Then link.InvokeMember("click")


    Das hier gemacht

    Visual Basic-Quellcode

    1. If value.Contains("muenchen") Then link.InvokeMember("click")


    Klappt prima!!

    DANKE FÜR EURE HILFE!!
    IHR SEID DIE BESTEN!!! :D

    Lg Markus

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

    So ist die Link-holen Sub korrekt und member werden auch invoked:

    VB.NET-Quellcode

    1. Private Sub Links_holen()
    2. Dim link As HtmlElement, value As String
    3. Dim doc As HtmlDocument = WebBrowser1.Document
    4. Dim links As HtmlElementCollection = doc.Links
    5. For Each link In links
    6. value = link.GetAttribute("href")
    7. If value.Contains("donate") Then
    8. Debug.Print("found: " & value)
    9. _isBusy = True
    10. link.InvokeMember("click")
    11. waitComplete()
    12. End If
    13. Next
    14. End Sub

    Folgefehler kommen, insbesondere Popups, die aber wohl eher mit dem Pennergame, eigenen Spendenlink und spendenspezifischen Details zu tun haben. Aber das musst Du bitte selber klären, ich bin kein Anhänger von diesem Game und wir sind auch keine Cheat-Programmierer.

    Mir ging es nur darum das invoke zu überprüfen ...