/ / Czekaj aż załaduje się WebBrowser? (VB 2010) - vb.net, formularze, ładowanie, czekaj

Zaczekaj aż załaduje się WebBrowser? (VB 2010) - vb.net, formularze, ładowanie, czekaj

Szukałem i szukałem kodu, a wszystko, co próbowałem, nie działa. Zasadniczo potrzebuję w pełni załadować WebBrowser przed uruchomieniem kodu testowego ...

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

Jak widać, próbowałem użyć skryptu, aby mnie zmusićZaloguj się do Xbox.com i działa, ale tylko trochę. Proces tego kodu jest zbyt szybki, nie sprawdza właściwego kodu źródłowego dla napisu "Aby kontynuować ...", zasadniczo

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

Po tym kliknięciu kliknie przyciskto robi proces logowania, ale musi załadować całą nową stronę, problem polega na tym, że wykonuje kolejną linię kodu zbyt szybko, a następna linia kodu wyszukuje ten ciąg w złym kodzie źródłowym. Potrzebuję go CZEKAĆ, aby załadować tę stronę, a następnie uruchomić tę linię

RichTextBox1.Text = WebBrowser1.DocumentText

Który kopiuje kod źródłowy do przeglądarki internetowejpole tekstowe, które następnie jest wyszukiwane dla ciągu znaków. Próbowałem wszystkiego. Czuję, że WaitForPageLoad () będzie działać świetnie, ale pojawia się błąd informujący mnie, że nie jest on zadeklarowany. Czy ktoś może pomóc?

Odpowiedzi:

0 dla odpowiedzi № 1

Ten kod powinien pomóc.

Zdefiniuj zmienną globalną o nazwie complete i ustaw ją na false

Dim completed = false

Teraz w swoim dokumencie przeglądarki wypełnij ten kod

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

completed = true

End Sub

Teraz chcesz poczekać, aż Twoja przeglądarka załaduje stronę

While Not completed
End While

Wszyscy razem powinniście mieć coś takiego

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 dla odpowiedzi nr 2

Musisz dodać DocumentCompleted Event Handler i wyzwolić dowolny kod z odpowiedniej metody. To jest:

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

---- ZAKTUALIZUJ CAŁĄ WEBBROWSER

Jeśli otworzysz nowy projekt i wkleisz ten kod (i dodaj TextBoxes/RichTextBox do twojej postaci), działałoby bez problemu:

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 dla odpowiedzi nr 3
  For I As Integer = 0 To 500
If MyBrowser.ReadyState = WebBrowserReadyState.Complete Then Exit For
Threading.Thread.Sleep(1)
Application.DoEvents()
Next