Event Handler vom Webbrowser.DocumentComplete funktioniert nicht?

  • VB.NET

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

    Event Handler vom Webbrowser.DocumentComplete funktioniert nicht?

    Hallo,

    ich bin mal wieder dabei ein kleines Programm mit Hilfe des Webbrowser-Controls zu schreiben. Soweit alles kein Problem, wär da nicht VB 2010 im Weg ^^

    Ich habe ein Webbrowser und möchte damit eine Seite aufrufen. Damit ich keine Warteschleife einbauen muss, bis das Dokument geladen ist, habe ich den Addhandler eingebaut:

    VB.NET-Quellcode

    1. Private Sub webbrowser_navigate(ByVal sURL As String)
    2. With WebBrowser1
    3. .Navigate(sURL)
    4. AddHandler .DocumentCompleted, AddressOf webbrowser_documentcompleted
    5. End With
    6. End Sub



    Wenn er die URL fertig geladen hat soll er auf das Event zurückgreifen. Da ich mehrere Seiten aufrufe habe ich die Sub an meine Bedürfnisse angepasst:

    VB.NET-Quellcode

    1. Private Sub webbrowser_documentcompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. ' Entscheide anhand der URL
    3. If e.Url.ToString = url1 Then
    4. html1 = WebBrowser1.DocumentText.ToString
    5. ElseIf e.Url.ToString = url2 Then
    6. html2 = WebBrowser1.DocumentText.ToString
    7. End If
    8. End Sub


    Leider ruft er erst garnicht die DocumentCompleted Sub auf. Ich frag mich aber warum? Kann mir jemand behilflich sein...?! Ich hab das Forum schon durchsucht und rumprobiert aber ich werde einfach nicht schlau..
    Zu erwähnen wäre noch, dass ich das ganze in einem Thread laufen lasse, damit ich weiterhin mein Programm benutzen kann. Vielleicht liegt es daran?

    Danke für eure Hilfe
    poncho :whistling:

    Triple-Axe schrieb:

    mach doppelklick auf das webbrowser element und schreibe in die neue sub den code der NUR wenn die seite fertig geladen ist aufgerufen wird


    Hab ich bereits versucht. Das ändert leider gar nichts. Die Sub ist genau identisch mit meiner geposteten.. das is ja genau das was mich so stutzig macht.

    Ich werd mal ein neues Programm erstellen wo nur dieser Part abgearbeitet wird. Mal sehen ob ich schlauer werde

    /edit

    Habe genau das gemacht. Selbst wenn ichs threadden lasse funktioniert es mit einer neuen Applikation. In meiner jetzigen jedoch nicht. Ich verzweifle..

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. MsgBox("LOL")
    3. End Sub


    geht

    kommentier deine komplett aus und testen mein event wenn das nicht geht > anderes problem

    edit:
    und nimm bitte das statt endif (openbook.galileocomputing.de/vb_net/msvb020006.htm )
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Select Case e.Url.ToString
    2. Case url1
    3. html1 = WebBrowser1.DocumentText.ToString
    4. Case url2
    5. html2 = WebBrowser1.DocumentText.ToString
    6. Case Else
    7. MsgBox("fehler")
    8. End Select


    Triple-Axe schrieb:

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. MsgBox("LOL")
    3. End Sub


    geht

    kommentier deine komplett aus und testen mein event wenn das nicht geht > anderes problem

    edit:
    und nimm bitte das statt endif (openbook.galileocomputing.de/vb_net/msvb020006.htm )
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Select Case e.Url.ToString
    2. Case url1
    3. html1 = WebBrowser1.DocumentText.ToString
    4. Case url2
    5. html2 = WebBrowser1.DocumentText.ToString
    6. Case Else
    7. MsgBox("fehler")
    8. End Select



    Triple-Axe schrieb:

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. MsgBox("LOL")
    3. End Sub


    geht

    kommentier deine komplett aus und testen mein event wenn das nicht geht > anderes problem

    edit:
    und nimm bitte das statt endif (openbook.galileocomputing.de/vb_net/msvb020006.htm )
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Select Case e.Url.ToString
    2. Case url1
    3. html1 = WebBrowser1.DocumentText.ToString
    4. Case url2
    5. html2 = WebBrowser1.DocumentText.ToString
    6. Case Else
    7. MsgBox("fehler")
    8. End Select




    Hallo, danke nochmals für die schnelle Hilfe!

    Das ich dort Select Case anwenden kann ist klar, aber danke für die Erinnerung daran :)

    Zum Thema zurück:
    Funktionieren tut es auch, wenn ich es nicht bei meinem Programm anwende. Ich hab gerade mal was ausprobiert und siehe da, so funktioniert es.. trotzdem ist es ne bescheuerte Lösung und nicht die, die ich gerne hätte.

    Wenn ich nach
    WebBrowser1.Navigate(url)
    ein
    Thread.Sleep(3000)
    einfüge.. funktioniert es. Wenn ich es wieder rausnehme, funktioniert es nicht mehr ?( Jetzt blick ich irgendwie gar nicht mehr durch
    warum steuerst du den webbrowser nicht so an :

    VB.NET-Quellcode

    1. Private Sub webbrowser_navigate(ByVal sURL As String)
    2. WebBrowser1.Navigate(sURL)
    3. End Sub


    bzw packst das in die sub die die "Private Sub webbrowser_navigate(ByVal sURL As String)
    " anspricht :

    VB.NET-Quellcode

    1. WebBrowser1.Navigate(sURL)



    ich mache das immer so und noch niemals das problem ?(


    oder anders gefragt : wie wird die

    VB.NET-Quellcode

    1. Private Sub webbrowser_navigate(ByVal sURL As String)
    aufgerufen
    Ich habe es schon abgeändert und die Sub für sinnlos erklärt. Ich muss gestehen, dass mein Programm nur eine zusammensetzung aus vorherigen Versionen ist und da hab ichs halt übernommen. Die Sub habe ich bereits entfernt und es direkt via Webbrowser1.Navigate(url) ersetzt.

    Das ganze sieht so aus.. was dir aber nicht sonderlich hilft.. habs mal auf vb-paradise abgeändert. Die webbrowser_login Sub führt ein Login in einem Forum aus. Daraufhin wird die URL zur Threaderstellung angesurft und dann soll halt nen Thread erstellt werden. Das alles klappt auch aus meinen vorherigen Versionen. Nur halt des DocumentComplete nicht richtig. Habe es in vorherigen Versionen mit ReadyState gelöst, da aber Application.DoEvents() keine saubere Programmierung ist, habe ich mich entschlossen diesem endlich ein Ende zu setzen.

    VB.NET-Quellcode

    1. If button1.Checked = True Then
    2. WebBrowser1.Navigate(url)
    3. Thread.Sleep(3000)
    4. webbrowser_login(html, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    5. WebBrowser1.Navigate(thread_create_url)
    6. End If
    mach es so :


    starte das laden der page

    VB.NET-Quellcode

    1. If button1.Checked = True Then
    2. WebBrowser1.Navigate(url)
    3. End If


    schaue wo du landest und wiederhole das

    VB.NET-Quellcode

    1. 'neue sub irgendwo einbinden is klar
    2. Private Sub WebBrowser2_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser2.DocumentCompleted
    3. ' Entscheide anhand der URL
    4. If e.Url.ToString = url1 Then
    5. html1 = WebBrowser1.DocumentText.ToString
    6. webbrowser_login(html, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    7. WebBrowser1.Navigate(thread_create_url)
    8. ElseIf e.Url.ToString = url2 Then
    9. html2 = WebBrowser1.DocumentText.ToString
    10. webbrowser_login(html, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    11. WebBrowser1.Navigate(thread_create_url)
    12. End If
    13. End Sub


    edit sry mein internet spinnt ich bau grad an meinem proxy rum :D
    oder meld dich in skype

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Triple-Axe“ ()

    Triple-Axe schrieb:

    mach es so :


    starte das laden der page

    VB.NET-Quellcode

    1. If button1.Checked = True Then
    2. WebBrowser1.Navigate(url)
    3. End If


    schaue wo du landest und wiederhole das

    VB.NET-Quellcode

    1. 'neue sub irgendwo einbinden is klar
    2. Private Sub WebBrowser2_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser2.DocumentCompleted
    3. ' Entscheide anhand der URL
    4. If e.Url.ToString = url1 Then
    5. html1 = WebBrowser1.DocumentText.ToString
    6. webbrowser_login(html, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    7. WebBrowser1.Navigate(thread_create_url)
    8. ElseIf e.Url.ToString = url2 Then
    9. html2 = WebBrowser1.DocumentText.ToString
    10. webbrowser_login(html, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    11. WebBrowser1.Navigate(thread_create_url)
    12. End If
    13. End Sub


    edit sry mein internet spinnt ich bau grad an meinem proxy rum :D
    oder meld dich in skype


    Hehe ^^

    Das is es. Ich bin echt ein Idiot :pinch: . Darauf hätte ich auch selber kommen können. Nunja. So funktioniert es. Danke für die freundliche und sehr schnelle Hilfe!

    VBP rockt :thumbup:

    Triple-Axe schrieb:

    kein ding

    poste wenn du soweit bist mal deinen code aus dem document loaded event vielleicht gibts noch n tip ;) ( wenn du magst )


    Na klar mach ich das!

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. Select Case e.Url.ToString
    3. Case url1
    4. htm1l = WebBrowser1.DocumentText.ToString
    5. webbrowser_login(html1, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    6. WebBrowser1.Navigate(new_thread_site1)
    7. Case url2
    8. html2 = WebBrowser1.DocumentText.ToString
    9. webbrowser_login(html2, username, password, "[URL]", "http://www.web.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)
    10. WebBrowser1.Navigate(new_thread_site2)
    11. Case Else
    12. MsgBox("Keine der angegeben URLs konnte gefunden werden!")
    13. End Select
    14. End Sub


    So ungefair habe ich es jetzt gelöst. Natürlich mit Select Case :thumbup:

    Triple-Axe schrieb:

    da sind 2 buchstaben vertauscht aber sonst is doch ok

    VB.NET-Quellcode

    1. htm1l = WebBrowser1.DocumentText.ToString


    aber sonst doch ganz ok


    Hmm, ja die Variablen heißen anders, das hab ich zum Verständnis abgeändert :). Trotzdem überlege ich gerade ob es überhaupt Sinn macht dies in einer Variable zwischen zu speichern. Eigentlich sinnfrei, da ich die Variable danach nicht mehr benötige. Da kann ich auch gleich WebBrowser1.DocumentText.ToString durch Html1 usw. ersetzen!

    VB.NET-Quellcode

    1. webbrowser_login(WebBrowser1.DocumentText.ToString, username, password, "[URL]", "http://www.vb-paradise.de", "navbar_username", "navbar_password", "cb_cookieuser_navbar", 0)


    Das mache ich dann wohl noch. Danke nochmals.. und weiter gehts :rolleyes: