For Each link In IEApp.Document.Links geht nur einmal

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Oelkanne.

    For Each link In IEApp.Document.Links geht nur einmal

    Guten Abend,

    Guten Abend, Im Beitrag Fehlermeldung:Unbehandelte Ausnahme: System.NotSupportedException konnte das Problem nicht gelöst werden.Deshalb habe ich mal einen Bespielcode generiert, mit dem man das Problem nachvollziehen kann. Das Problem: Die Codezeile For Each link In IEApp.Document.Links funktioniert immer nur beim ersten Aufruf. Wird im späteren Verlauf erneut For Each link In IEApp.Document.Links aufgerufen kommt es zum Fehler. Fehler :Unbehandelte Ausnahme: System.NotSupportedException {"Ausnahme von HRESULT: 0x800A01B6"} Ich komme nicht dahinter warum es nicht funktioniert.


    Quellcode

    1. Public Module Main
    2. Public Sub Main()
    3. Dim IEApp, link As Object
    4. Dim url As String
    5. url = ("https://www.vb-paradise.de/")
    6. IEApp = CreateObject("InternetExplorer.Application")
    7. IEApp.Visible = True
    8. IEApp.Navigate(url)
    9. System.Threading.Thread.Sleep(2000)
    10. Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop
    11. For Each link In IEApp.Document.links
    12. If link.InnerText = "Statistik" Then Exit For
    13. Next
    14. link.Click()
    15. System.Threading.Thread.Sleep(2000)
    16. Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop
    17. For Each link In IEApp.Document.links '|-
    18. If link.InnerText = "Dashboard" Then Exit For
    19. Next '|-
    20. link.Click()
    21. End Sub
    22. End Module
    Was wäre die richtige Vorgehensweise für die Aufgabenstellung?

    Hier: Auf der Seite vb-paradise.de/ auf den Button Statistik drücken;- > dann geht die neue Seite auf. Dann auf der Seite Statistik den Button Dashboard drücken - > dann sollte die Seite Dashboard wieder aufgehen.

    Kann man das wirklich nicht in VB realisieren, wenn einen nur die Bezeichner "Statistik" bzw "Dashboard" zur Verfügung stehen?
    Hi,

    realisieren kann man so ziemlich alles. Was Du als erstes machen solltest, bevor man Dir hier weiterhilft, ist => OPTION STRICT ON. Danach wirst Du wohl einige Fehlermeldungen erhalten und Du solltest versuchen, diese zu beheben. Falls Du da nicht weiterkommst, kannst Du Dich gerne melden, geholfen wird Dir immer.

    Du kannst gerne auch mehr über Dein Vorhaben erzählen, dann findet man meist einen sauberen Weg.....
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Gehen tuts schon. Man braucht einen Verweis auf die Com-Komponenten Microsoft.mshtml und Microsoft.Internet.Controls

    Benutzen kann man das Gerümpel dann in Etwa so:

    VB.NET-Quellcode

    1. Imports SHDocVw
    2. Imports mshtml
    3. Public Class Form1
    4. Protected Overrides Sub OnLoad(e As EventArgs)
    5. Dim ie = New SHDocVw.InternetExplorer()
    6. Dim url As Object = "www.vb-paradise.de"
    7. ie.Visible = True
    8. ie.Navigate2(url)
    9. AddHandler ie.DocumentComplete, Sub()
    10. Dim doc = DirectCast(ie.Document, mshtml.IHTMLDocument2)
    11. End Sub
    12. MyBase.OnLoad(e)
    13. End Sub
    14. End Class


    Das HTML-Document hat auch ne Property Links, welche aber wieder in irgendwas gecastet werden müssen und da hab ich dann aufgegeben, da nirgendwo irgendwas zu dem Mist steht. Ich kann gar nicht beschreiben, wie mir sowas auf den Strich geht. Darum hab ich hier auch nichts mehr gepostet und lass das Thema mal gut sein.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Scheint ja schon tricky zu sein SHDocVw überhaupt in Visual Studio hineinzubekommen für Hobbybastler.

    Wie dem auch sei:
    Dem Rat von SpaceyX folgend hake ich Visual Basic einfach ab, da es nicht möglich ist Buttons im Browser damit zu drücken.

    Dennoch Dank' an alle die es versucht haben.

    Oelkanne schrieb:

    hake ich Visual Basic einfach ab


    Wieso das denn? Das ist doch nicht die Schuld von VB. Jede andere Sprache ist ebenso auf diese unsäglichen COM-Komponenten angewiesen, wenn etwas in der Art gemacht werden soll. Und von Unmöglich hat keiner was gesagt. Ich verstehe auch nicht, warum man einen Button drücken sollte, wenn man einfach den entsprechenden Link direkt aufrufen kann.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Eine kleine Demo ... (der Code lässt sich bestimmt noch optimieren)
    Verweise wie in Post #7 werden benötigt.

    VB.NET-Quellcode

    1. Dim ieApp As SHDocVw.InternetExplorer
    2. Dim htmlDoc As mshtml.HTMLDocument
    3. Dim sUrl As String = "https://www.vb-paradise.de/"
    4. Dim arrLinkTexts As String() = {"Statistik", "Dashboard", "Mitglieder", "Spenden", "Forum", "Dashboard"}
    5. ieApp = New SHDocVw.InternetExplorer With {.Visible = True}
    6. ieApp.Navigate(sUrl)
    7. For Each sLinkText As String In arrLinkTexts
    8. Do While ieApp.Busy OrElse ieApp.ReadyState <> SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE
    9. System.Threading.Thread.Sleep(1000)
    10. Loop
    11. htmlDoc = CType(ieApp.Document, mshtml.HTMLDocument)
    12. For Each htmlElement As HTMLAnchorElement In htmlDoc.links
    13. If htmlElement.innerText <> Nothing AndAlso htmlElement.innerText.Equals(sLinkText) Then
    14. htmlElement.click() : Exit For
    15. End If
    16. Next
    17. System.Threading.Thread.Sleep(5000)
    18. Next
    19. ieApp.Quit()