2013-07-20 2 views
0

코드를 검색하고 검색했으며 시도한 모든 것이 작동하지 않습니다. 기본적으로 당신이 볼 수 있듯이WebBrowser로드까지 기다리시겠습니까? (VB 2010)

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 

내가 나를 Xbox.com에 로그인하기 위해 스크립트를 사용하려고 ... 완벽하게 테스트 코드를 실행하기 전에로드하려면 웹 브라우저가 필요하고,이 작업을 수행하지만, 단지 조금. 이 코드의 프로세스는 그 클릭, 그것은 수행 버튼을 클릭 않는 한 그것은 기본적으로

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

을 "... 계속하려면"라는 문자열에 대한 올바른 소스 코드를 확인하지 않습니다, 너무 빠른 로그인 프로세스이지만 완전히 새로운 페이지를로드해야하는 경우이 문제는 다음 코드 행을 너무 빨리 실행하고 다음 코드 행이 잘못된 소스 코드에서 해당 문자열을 검색한다는 것입니다. 내가로드 해당 페이지를 기다릴 필요,이 라인

RichTextBox1.Text = WebBrowser1.DocumentText 

를 실행하는 복사 한 다음 문자열을 검색하는 텍스트 상자에 웹 브라우저의 소스 코드. 나는 모든 것을 시도했다. 나는 WaitForPageLoad()가 훌륭하게 작동 할 것이라고 생각하지만 선언되지 않았다는 오류 메시지가 나타납니다. 누구든지 도와 줄 수 있습니까?

+1

, 나는 당신이 webbrowser.DocumentCompleted 이벤트를 찾고 있습니다 생각합니다. 콜백 이벤트로 코드를 이동하기 만하면 문서가 완전히로드 될 때 코드가 실행됩니다. 다른 문서가 웹 페이지에로드되면 여러 번 실행될 수 있습니다. –

답변

0

이 코드가 도움이 될 것입니다.

이제 웹 브라우저 때까지 기다리고 싶지했다 완전한라는 전역 변수를 정의하고

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

    completed = true 

    End Sub 

에서 웹 브라우저 문서 전체 넣어에서 이제 거짓

Dim completed = false 

이 코드로 설정 님이 페이지를로드했습니다.

While Not completed 
End While 

함께하면 다음과 같은 메시지가 표시됩니다. 나는 당신의 질문을 이해하고, 내가 확실하지 메신저 경우이

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 
+0

** hold on ... ** 내 관점에서 DocumentCompleted의보다 정확한 예를 제안 해 드리겠습니다. 내 대답은 여기를 참조하십시오. http://stackoverflow.com/a/32298026/2396732 – JCM

1

DocumentCompleted Event Handler을 추가하고 해당 메소드의 코드를 트리거해야합니다. 즉 :

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 

---- UPDATE 전체가 웹 브라우저

새 프로젝트를 열고이 코드를 붙여 넣습니다 (그리고 양식에 TextBoxes/RichTextBox 추가)하는 경우, 그것은 아무 문제없이 작동합니다 :

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 
+0

WebBrowser1이 선언되지 않았다는 오류를받습니다. 보호 수준으로 인해 액세스 할 수 없습니다. 그건 내가 WaitForPageLoad()에있어 같은 오류입니다 ... 어떤 도움이 필요합니까? –

+0

@ JohnSmith 내 코드를 자신의 것으로 변경해야합니다. 내 코드는 WebBrowser1이 있다고 가정합니다. 나는 당신이 각 비트가 의미하는 바를 이해하고 있기를 바랄 지 모르지만 당신이 당신의 것에 의존하지 않고 그것을 사용할 수 있도록 코드를 업데이트 할 것입니다. (이것은 제 대답 /이 사이트의 전체 요점입니다. 전체 작업 코드 제공). – varocarbas

+0

나는 그것을 이해하려고 애 쓰고 있지만 보호 수준 때문에 그것이 접근 할 수 없다고 말하는 이유에 대해 혼란 스럽다. 내 지식의 최고로 WebBrowser1을 선언했습니다 ... –

-1
For I As Integer = 0 To 500 
      If MyBrowser.ReadyState = WebBrowserReadyState.Complete Then Exit For 
      Threading.Thread.Sleep(1) 
      Application.DoEvents() 
     Next 
관련 문제