/ / Warten, bis der WebBrowser geladen wird? (VB 2010) - vb.net, Formen, Laden, Warten

Warten bis WebBrowser laden? (VB 2010) - vb.net, Formulare, laden, warten

Ich habe nach Code gesucht und gesucht und alles, was ich versucht habe, funktioniert nicht. Grundsätzlich muss der WebBrowser vollständig geladen sein, bevor ein Testcode ausgeführt wird ...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

WebBrowser1.Document.GetElementById("login").SetAttribute("value", TextBox1.Text)
WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", TextBox2.Text)
WebBrowser1.Document.GetElementById("SI").InvokeMember("Click")

Where I need to insert the WaitForPageLoad()


RichTextBox1.Text = WebBrowser1.DocumentText
If InStr(RichTextBox1.Text, "To continue, create an Xbox profile") Then
MsgBox("You do not have an xbox account associated with this gamertag, please log into xbox.com with the account then create an xbox profile.")
Else
MsgBox("nothing")

End If

Wie Sie sehen, habe ich versucht, ein Skript zu verwenden, um mich zu machenMelden Sie sich bei Xbox.com an, und es funktioniert, aber nur ein bisschen. Der Ablauf dieses Codes ist zu schnell, er prüft im Grunde nicht den richtigen Quellcode für die Zeichenfolge "Fortfahren ..."

    WebBrowser1.Document.GetElementById("login").SetAttribute("value", TextBox1.Text)
WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", TextBox2.Text)
WebBrowser1.Document.GetElementById("SI").InvokeMember("Click")

Nachdem Sie diesen Klick ausgeführt haben, klicken Sie auf die SchaltflächeDas Anmeldevorgang wird zwar ausgeführt, es muss jedoch eine ganze neue Seite geladen werden. Das Problem besteht darin, dass die nächste Codezeile viel zu schnell ausgeführt wird und die nächste Codezeile im falschen Quellcode nach diesem String sucht. Ich brauche es, um zu warten, bis diese Seite geladen ist, und dann diese Zeile ausführen

RichTextBox1.Text = WebBrowser1.DocumentText

In dem der Quellcode des Webbrowsers kopiert wirdein Textfeld, das dann nach der Zeichenfolge durchsucht wird. Ich habe alles versucht Ich habe das Gefühl, dass WaitForPageLoad () großartig funktionieren würde, aber ich erhalte die Fehlermeldung, dass es nicht deklariert ist.

Antworten:

0 für die Antwort № 1

Dieser Code sollte helfen.

Definieren Sie eine globale Variable mit dem Namen "complete" und setzen Sie sie auf "false"

Dim completed = false

Geben Sie nun in Ihrem Webbrowser-Dokument diesen Code ein

   Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)

completed = true

End Sub

Nun möchten Sie warten, bis Ihr Webbrowser die Seite geladen hat

While Not completed
End While

Alle zusammen sollten Sie so etwas haben

Public Class WaitForWebBrowser

Dim completed = False

Sub Main()
WebBrowser1.Navigate("http://google.com")

While Not completed
End While
"when the web browser is done complete will be set to true and will exit the while loop and continue your code

End Sub

Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)

completed = true

End Sub

End Class

1 für die Antwort № 2

Sie müssen hinzufügen DocumentCompleted Event Handler und beliebigen Code aus der entsprechenden Methode auslösen. Das ist:

Private Sub startBrowser()

AddHandler WebBrower1.DocumentCompleted, AddressOf WebBrowser_DocumentCompleted

WebBrower1.Navigate("http://...")

End Sub

Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
"CALL ALL YOUR CODE FROM HERE
End Sub

---- GANZE WEBBROWSER UPDATE

Wenn Sie ein neues Projekt öffnen, fügen Sie diesen Code ein (und fügen Sie das hinzu TextBoxes/RichTextBox zu Ihrem Formular) würde es problemlos funktionieren:

Public Class Form1
Friend WithEvents webBrowser0 As New WebBrowser
Friend WithEvents tabs As New TabControl
Friend WithEvents tabPage0 As New TabPage

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
startBrowser()
End Sub
Public Sub startBrowser()

Dim url As String = "http://..."

tabs.Controls.Add(tabPage0)
tabPage0.Controls.Add(webBrowser0)
AddHandler webBrowser0.DocumentCompleted, AddressOf WebBrowser_DocumentCompleted

webBrowser0.Navigate(url)

End Sub

Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)

webBrowser0.Document.GetElementById("login").SetAttribute("value", TextBox1.Text)
webBrowser0.Document.GetElementById("passwd").SetAttribute("value", TextBox2.Text)
webBrowser0.Document.GetElementById("SI").InvokeMember("Click")



RichTextBox1.Text = webBrowser0.DocumentText
If InStr(RichTextBox1.Text, "To continue, create an Xbox profile") Then
MsgBox("You do not have an xbox account associated with this gamertag, please log into xbox.com with the account then create an xbox profile.")
Else
MsgBox("nothing")

End If

End Sub
End Class

-1 für die Antwort № 3
  For I As Integer = 0 To 500
If MyBrowser.ReadyState = WebBrowserReadyState.Complete Then Exit For
Threading.Thread.Sleep(1)
Application.DoEvents()
Next