2012-09-25 2 views
1

브라우저 컨트롤이있는 양식이 있습니다. (이 컨트롤은 레지스트리 편집기에서 값을 설정하기 때문에 IE9를 사용합니다)WebBroswer_DocumentCompleted 이벤트가 작동하지 않습니다.

이 웹 브라우저는 특정 URL로 이동하여 HTML 페이지의 모든 필드를 채운 다음 제출하여 결과 페이지가 표시됩니다. 제 문제는 제가이 정보 페이지가 완전히로드되거나 완료되어 일부 정보를 가져올 수있는시기를 알고 싶다는 것입니다. 첫 번째 페이지에는 잘 작동하지만 결과 페이지에는 작동하지 않는 WebBroswer_DocumentCompleted 이벤트를 사용합니다. 결과는 페이지가로드되기 전에 트리거됩니다.

결과 페이지 내 div 태그를 확인하는 다른 솔루션을 시도했지만 (결과 페이지가 완전히로드 될 때만 나타남) 항상 작동하는 것은 아닙니다.

내 코드 : DIV ID가 "Summary_Views"즉

private void WebBroswer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 

     HtmlElementCollection elc3 = this.BotBrowser.Document.GetElementsByTagName("div"); 
     foreach (HtmlElement el in elc3) 
     { 
      if (el.GetAttribute("id").Equals("Summary_Views")) //this determine i am at the result page 
      { 
       // fetch the result 
      } 
     }} 

. BLAST 도구 및 연구 목적의 데이터베이스 웹 사이트에 대한 요구에 따라 해당 웹 사이트의 링크를 제공 할 수 있습니다.

답변

1

마지막으로 내 문제를 해결했습니다. 도구 상자에서 타이머 컨트롤을 넣고 시간 간격을 200ms로 설정하고 Autoreset 속성을 false로 설정합니다. 나는이 Div가로드되었는지 아닌지를 200ms마다 확인하는 코드가있는 틱 이벤트를 설정 한 후 Autoreset 속성이 true로 설정됩니다.이 솔루션은 완벽하게 작동합니다.

1

당신은 알고 계십니까? 그렇다면 사람들이 그렇게 도와 줄 수 있도록 말하십시오. 그렇지 않다면 사람들이 대안을 제시 할 수 있습니다.

내 생각에 자바 스크립트에서 콘텐츠를 생성하고 있습니다. 그런 다음 문서가 완료되면 JavaScript가 실행되기 전에 JavaScript가 완료 될 때까지 기다려야합니다. 해결책은 웹 페이지에 따라 다릅니다. 따라서 진단 목적으로 여러 문서 완성을 처리하고 필요한 문서가 무엇인지 파악할 수 있는지 확인해야 할 수 있습니다.

+0

나는 당신과 동의합니다. DocumentComplted 이벤트가 발생한 후에도 페이지가 완전히로드 될 때까지 기다려야합니다. 그래서 내가 어떻게 기다릴 수 있니? Thread.Sleep() 함수를 사용하지만 페이지 및 코드 전체 로딩을 중지합니다. –

+0

나는이 Div 태그를 찾는 함수를 만들었고 (ThreadStart 델리게이트를 사용하여) 새 스레드에이 함수를 할당했다.이 새로운 스레드를 시작하고 DocumentCompleted 이벤트가 결과 페이지에 대해 실행 된 후 몇 초 동안 잠자기하고 싶다. Div 태그를 쉽게 찾을 수 있습니다. –

+0

나는 비교적 전에 Stackoverflow에 익숙하지 않았으므로이 응답을 전에는 알지 못했다. DocumentComplete 이벤트에 대한 핸들러를 만드는 아주 간단한 방법이 있습니다. 디자이너에서 WebBrowser 컨트롤을 두 번 클릭하기 만하면됩니다. DocumentComplete 이벤트는 WebBrowser 컨트롤 디자이너의 기본 이벤트입니다. –

관련 문제