2017-02-17 3 views
0

VB.Net 클래스 라이브러리 프로젝트에서 작업 중이며 같은 URL을 여러 번 탐색하는 데 사용하는 웹 브라우저 컨트롤 (양식 내 있음)이 있습니다. 이 특별한 순서 :웹 브라우저 제어 - 다른 URL 다음 하나로 이동합니다.

이의이 URL을 가정 해 보자는 다음과 같습니다 https://www.google.com/submitForm

루프 시작하십시오

  1. 이동
  2. 문서 완료 이벤트를 URL로 탐색 URL의
  3. 양식 DOM 조작을 수행하고 제출
  4. 닫기 웹 브라우저 형태

루프 끝

코드 :

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 

문제 : 이 루프를 실행하려고 할 때마다 여러 웹 브라우저 양식이 열리지 만 첫 번째 창만 닫히고 다른 창은 계속 열립니다. 또한 여러 번 탐색을 수행하지만 실제로 마지막 탐색 제출 만 수행합니다.

예상되는 동작 : 양식이 실제로 각 완료 이벤트를 통해 이동, 위에서 언급 한 절차를 통해 양식을 닫은 후 다시 형태, 탐색 및 가까운 형태의 생성을 시작하는 내가 좋아하는 것입니다.

+1

당신은뿐만 아니라 우리에게 양식에 대한 관련 코드를 표시해야합니다. 이걸 재현 할 수있을만큼 우리에게 너무 적은 것을주었습니다. –

+0

안녕하세요 @VisualVincent : 양식 관련 코드도 추가했습니다. 이것을 달성 할 수있는 방법이 있다면 알려주시겠습니까? – Neophile

+0

submit 호출이 폼이해야 할 마지막 일이라고 가정합니다 .... me.close를 따르십시오. –

답변

2

나는이 문제를 직접 해결할 수 있었고 유사한 문제를 해결하려고하는 다른 사람에게 대답을 게시 할 것이라고 생각했습니다.

기본적으로, 내가 한 것은 URL의 목록을 하나씩 반복하는 대신 documentcomplete 이벤트가 끝날 때까지 기다렸다가 일단 그렇게하면 동일한 웹 브라우저를 사용하여 내 모든 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