2017-02-17 83 views
0

我正在研究一個VB.Net類庫項目,並且我有一個Web瀏覽器控件(在一個表單中)用於多次導航到相同的URL這個特殊的序列:Web瀏覽器控件 - 一個接一個地導航到URL

假設的網址是:https://www.google.com/submitForm

環路啓動

  1. 瀏覽URL,
  2. 文檔完備事件導航的URL的
  3. 執行DOM操作,並提交形式
  4. 關閉Web瀏覽器形式

循環結束

代碼:

Public Sub customNavigation() 
    For j = 0 To listOfUrls.Count - 1 
        testWebBrowserForm = New WebBrowserForm(Me) 
        Dim browserSize As System.Drawing.Size = New Size(100, 100) 
        testWebBrowserForm.Size = browserSize 
        testWebBrowserForm.FormBorderStyle = FormBorderStyle.FixedSingle 
        testWebBrowserForm.Show() 
        testWebBrowserForm.SendToBack() 
        testWebBrowserForm.Location = New Point(100, 100) 

        testWebBrowserForm.Navigate(New Uri("https://google.com/submitForm")) 
       Next 
End Sub 

// Once the document has completely loaded 
Public Sub documentLoadComplete() 

     Dim submitButton As HtmlElement = Nothing, formEl As HtmlElement = Nothing 

     Dim attachmentInputElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.GetElementsByTagName("input") 
     Dim formElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.Forms 
     Dim form As Windows.Forms.HtmlElement = testWebBrowserForm.webBrowser.Document.Forms(0) 

     For y = 0 To formElements.Count - 1 
      Dim formelement As HtmlElement = formElements(y) 
      If formelement.GetAttribute("name").Equals("theForm") Then 
       formEl = formelement 
      End If 
     Next 

     For i = 0 To attachmentInputElements.Count - 1 
      Dim inputElement As HtmlElement = attachmentInputElements(i) 
      If inputElement.GetAttribute("type").Equals("submit") Then 
       submitButton = inputElement 
      End If 
     Next 

     testWebBrowserForm.webBrowser.Document.InvokeScript("doSomething") 

     submitButton.InvokeMember("click") 

     testWebBrowserForm.Close() 
End Sub 

問題: 每次我嘗試運行此循環時,它都會打開多個Web瀏覽器窗體,但只會關閉第一個窗體並將其他窗體打開。另外,它確實執行了多次導航,但實際上只進行了最後一次導航提交。

預期的行爲: 我想爲形式實際上經過上述過程中,通過每完成的事件,關閉窗體,然後再次啓動形式,導航和關閉形式的創作。

+1

你必須向我們展示的形式相關的代碼。你給我們太少,無法重現這一點。 –

+0

Hi @VisualVincent:我也爲表單添加了相關的代碼。請讓我知道是否有辦法實現這一目標? – Neophile

+0

假設提交調用是表單最後要做的事情....按照me.close –

回答

2

我自己設法解決了這個問題,並認爲我會爲可能試圖解決類似問題的其他人發佈答案。

基本上,我所做的是,而不是循環瀏覽URL的列表,我一直等待documentcomplete事件完成,一旦這樣做,我使用相同的webbrowserform並執行另一個導航,直到所有的URL已完全導航,之後我關閉表格。

代碼:

Public currentUrlIndex As Integer = Nothing, currentUrl As String = Nothing 
    Public Sub customNavigation() 

         testWebBrowserForm = New WebBrowserForm(Me) 
         Dim browserSize As System.Drawing.Size = New Size(100, 100) 
         testWebBrowserForm.Size = browserSize 
         testWebBrowserForm.FormBorderStyle = FormBorderStyle.FixedSingle 
         testWebBrowserForm.Show() 
         testWebBrowserForm.SendToBack() 
         testWebBrowserForm.Location = New Point(100, 100) 
         currentUrlIndex = 0 
         currentUrl = listOfUrls(currentUrlIndex) 
         testWebBrowserForm.Navigate(New Uri(currentUrl)) 

    End Sub 

    // Once the document has completely loaded 
    Public Sub documentLoadComplete() 

      Dim submitButton As HtmlElement = Nothing, formEl As HtmlElement = Nothing 

      Dim attachmentInputElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.GetElementsByTagName("input") 
      Dim formElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.Forms 
      Dim form As Windows.Forms.HtmlElement = testWebBrowserForm.webBrowser.Document.Forms(0) 

      For y = 0 To formElements.Count - 1 
       Dim formelement As HtmlElement = formElements(y) 
       If formelement.GetAttribute("name").Equals("theForm") Then 
        formEl = formelement 
       End If 
      Next 

      For i = 0 To attachmentInputElements.Count - 1 
       Dim inputElement As HtmlElement = attachmentInputElements(i) 
       If inputElement.GetAttribute("type").Equals("submit") Then 
        submitButton = inputElement 
       End If 
      Next 

      testWebBrowserForm.webBrowser.Document.InvokeScript("doSomething") 

      submitButton.InvokeMember("click") 

      If currentUrlIndex = listOfUrls.Count - 1 Then 
        testWebBrowserForm.Close() 
        Exit Sub 
       Else 
        currentUrlIndex = currentUrlIndex + 1 
        currentUrl = listOfUrls(currentUrlIndex) 
        testWebBrowserForm.Navigate(New Uri(currentUrl)) 
       End If 
    End Sub