warten auf webbrowser

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    warten auf webbrowser

    Hallo,

    Ich verstehe nicht, wie man es schafft, dass auf eine Webbrowser Seite gewartet werden soll.
    Habe schon eine Sache ausprobiert und viel bei google , etc. geschaut aber nichts gefunden. ( hier habe ich auch geschaut : vb-paradise.de/index.php?form=…=webbrowser+seite+geladen)

    Mein Ergebniss sieht bisher so aus:

    VB.NET-Quellcode

    1. WebBrowser1.Navigate("www.google.com")
    2. If WebBrowser1.ReadyState Then
    3. msgbox("Fertig geladen")
    4. endif

    Kann mir jmd. sagen, was ich falsch mache? :)

    mfg,
    Timm
    Hi,

    in eigentlich allen Programmiersprachen gibt es Vorgänge auf die gewartet werden muss. Als Beispiel nehmen wir mal deinen WebBrowser. Du navigierst zu einer Seite. Das dauert normalerweise ein bisschen. Also müsstest du deine Methode warten lassen bis er fertig ist, oder du nutzt die dafür vorgegebenen Ereignisse. Diese werden in deiner Entwicklungsumgebung mit einem Blitz markiert. Dein Form_Load ist zum Beispiel eine Methode die ausgelöst wird, wenn das Ereigniss, dass die Form geladen ist eintritt. Beim Webbrowser gibt es solche Ereignisse auch.
    Über diese Ereignisse kann man in deinem Fall z.B hier nachlesen. msdn.microsoft.com/de-de/libra…ms.webbrowser_events.aspx
    Betrachtest du genauer welche Ereignisse es gibt, fällt auf dass es eins gibt, was auf deinen Fall zutrifft. msdn.microsoft.com/de-de/libra…er.documentcompleted.aspx
    Das Document-Completed-Ereigniss wird ausgelöst wenn der Browser fertig geladen ist.
    Dementsprechend ist dieses "Event", das was du suchst.

    Du wählst das Event aus und kannst nun das reinschreiben, was passieren soll, nachdem der Browser fertig geladen hat.

    Edit:
    @programmer71

    Ja ein Blick auf MSDN hätte dich zum DocumentCompleted-Event geführt ... ;)
    Bilder
    • webbrowser.png

      35,87 kB, 1.116×622, 230 mal angesehen
    @timmlanhd11

    VB.NET-Quellcode

    1. WebBrowser1.Navigate("www.google.com")
    2. If WebBrowser1.ReadyState <> WebbrowserReadyState.Loaded Then
    3. MsgBox("Fertig geladen")
    4. End if


    Ein Blick auf MSDN hätte gereicht und du hättest gesehen, dass du auch einen Wert angeben musst.
    Wobei das DocumentCompletedEvent hier wirklich besser wäre...

    @LaMiy
    Hab ich ja geschrieben ;)
    Die Fehlermeldung:

    Quellcode

    1. der objektverweis wurde nicht auf eine objektinstanz festgelegt

    bedeutet, dass du versuchst, von einem nicht instanzierten Objekt etwas abfragst, also von Nothing (mit "New" instanziert man Objekte).
    Ich denke, dass es das Element (noch) nicht gibt.
    Mfg
    Vincent

    @timmlanhd11
    Anscheinend gibt es das Element mit der id "gbqfqw" nicht. Ich hab es auch mal getestet und es klappt nicht.
    (By the way wir hatten doch gesagt du sollst das DocumentCompleted-Event nehmen ;) )

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("http://google.de")
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. MessageBox.Show(WebBrowser1.Document.GetElementById("gbqfqw").InnerText)
    8. End Sub
    9. End Class

    Was genau willst du denn erreichen ?

    LaMiy schrieb:

    @timmlanhd11
    Anscheinend gibt es das Element mit der id "gbqfqw" nicht. Ich hab es auch mal getestet und es klappt nicht.
    (By the way wir hatten doch gesagt du sollst das DocumentCompleted-Event nehmen ;) )

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("http://google.de")
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. MessageBox.Show(WebBrowser1.Document.GetElementById("gbqfqw").InnerText)
    8. End Sub
    9. End Class

    Was genau willst du denn erreichen ?


    Also:
    ich habe jetzt nochmal die id vom google such Feld gesucht und auch gefunden



    Aber funktionieren möchte es immer noch nicht :(
    da kommt der gleiche Fehler wie vorher.
    Die Error Meldung(der objektverweis wurde nicht auf eine objektinstanz festgelegt) kommt auch immer, wenn die Website noch nicht fertig geladen hat :(
    Habt ihr eine Idee?

    Achja, erreichen möchte ich, dass der Webbrowser bei google sucht :)
    Na wieso wohl nicht, du Navigierst zu Google, führst Nanosekunden später dne Code aus der überprüft ob der Browser läd und willst dann auf ein Objekt zugreifen. Das kann ja nicht funktionieren, kein Browser ist so schnell, vorallem nicht der IE. Das heißt du brauchst eine Schleife die Solange läuft bis der Browser fertig geladen hat oder die bessere Variante, das EVent nutzen das hier schon gepostet wurde, was gefeuert wird wenn der Browser fertig geladen hat.
    Falsches Element :!:
    So gehts:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. WebBrowser1.Navigate("http://google.de")
    3. End Sub
    4. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    5. WebBrowser1.Document.GetElementById("q").InnerText = "Google"
    6. End Sub
    Mfg
    Vincent

    enIking1998 schrieb:


    Du willst eine Google-Suche ?

    Guck mal hier [VB.NET] Google Search Funktion

    Mfg.eniking1998


    Hallo,

    Danke für die Funktion :)
    Werde ich mir gleich anschauen.
    Aber ich würde gerne selbst mal was schreiben, muss ja nicht groß sein.
    Im moment kopiere ich nur und das finde ich irgendwie nicht sinn der Sache.

    Mfg
    @timmlanhd11
    Man kann mit dem WebBrowser auch gut und gern mal was selber ausprobieren. Guck dir das mal an.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("http://google.de")
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. End Sub
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. Dim a As String = WebBrowser1.Document.ActiveElement.Id 'Holt die ID vom aktuell Element
    10. WebBrowser1.Document.GetElementById(a).InnerText = "Hallo" 'Weißt anhand dieser ID Hallo dem entsprechenden Elemet zu
    11. End Sub
    12. End Class


    Du musst zuerst in die TextBox klicken. Wenn du dann den Button drückst bekommst du deine gewünschte ID.

    Daraus hast du die ID.
    Dann bist du fertig.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("http://google.de")
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. WebBrowser1.Document.GetElementById("lst-ib").InnerText = "Test"
    8. End Sub
    9. End Class
    Bilder
    • test.png

      26,51 kB, 753×344, 183 mal angesehen
    Mach in das Document Complete noch

    VB.NET-Quellcode

    1. If WebBrowser1.ReadyState Then
    2. End If


    rein, denn das Event wird gefeuert wenn das Hauptdokument fertig geladen wurde, heißt aber nicht, das wirklich schon alles da is, manchmal wird ja mittels AJAX noch was anchgeladen usw. und ReadyState is wirklich nur dann True, wenn der Browser alles fertig hat.

    Aber btw. wieso willst du überhaupt was in die Suchbox eingeben? Das doch viel zu kompliziert.

    VB.NET-Quellcode

    1. WebBrowser1.Navigate("https://www.google.de/search?q=" + TextBoxSearch.Text)
    macht auch was du willst und ist deutlich einfacherer und muss nur EINEN Aufruf machen.
    @timmlanhd11
    Mensch !
    Die Lösung steht doch schon da.
    Du hast doch herausgefunden, dass die ID "lst-ib" ist.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("http://google.de")
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
    8. WebBrowser1.Document.GetElementById("lst-ib").InnerText = "Test"
    9. End If
    10. End Sub
    11. End Class


    Edit: Ja du hast es hinbekommen, aber du weißt nicht wie der Code funktioniert. Also hast du aus der Sache leider (fast) nichts gelernt :huh: