2011-09-24 2 views
1

가 나는 시도했다 :WebBrowser.Navigate가 null HttpDocument를 반환하는 이유는 무엇입니까?

var browser1 = new WebBrowser(); 
browser1.Navigate("https://zikiti.co.il/");  
HtmlDocument document = browser1.Document; 

그러나 browser.Document은 null입니다.

왜?


내가 뭘 잘못하고 있니?

public static void FillForm() 
    { 
     browser1 = new WebBrowser(); 
     browser1.Navigate(new Uri("https://zikiti.co.il/")); 

     browser1.Navigated += webBrowser1_Navigated; 
     Thread.CurrentThread.Join(); 
    } 

    private static void webBrowser1_Navigated(object sender, 
WebBrowserNavigatedEventArgs e) 
    { 
     HtmlDocument document = browser1.Document; 
     System.Console.WriteLine(); 
    } 

응용 프로그램이 작동하지 않습니다. Btw,이 양식을 작성하고 제출하는 더 쉬운 방법이 있습니까? (페이지가 항상 JS에 의해 차단되므로 피들러에서 요청 헤더를 볼 수 없습니다.)

+0

@ 한자 Passant의 이전 답변 참조 : http://stackoverflow.com/questions/4269800/c-webbrowser-control-in-a-new-thread/4271581#4271581 – BrokenGlass

답변

1

Navigate은 비동기식이기 때문에 Document 속성 값을 읽을 때까지 탐색이 시작되지 않았습니다.

해당 페이지의 예제를 보면 Navigated 이벤트에 가입해야하는 "현재"URL을 읽을 수 있습니다. 동일 물은 Document를 읽는 경우에 적용됩니다. 이 이벤트에 대한 문서 상태 :

는 웹 브라우저 컨트롤이 새 문서를 탐색했을 때 알림을받을 수있는 탐색 이벤트를 처리합니다. Navigated 이벤트 이 발생하면 새 문서가로드되기 시작합니다. 즉, Document, DocumentText 및 DocumentStream 속성을 통해로드 된 내용 인 에 액세스 할 수 있습니다.

+0

그리고 browser.Url을 변경 한 경우 = 새로운 우리 ("... 구글 ...")? –

+0

@EladBenda : 'Navigated'에 대한 설명서의 첫 번째 줄에는 그렇게 할 때도 똑같이 작동한다고 나와 있습니다. – Jon

4

html을 다운로드하는 데 시간이 걸리기 때문에. 아무도 기다리고 싶지 않은 시간, 특히 사용자 인터페이스 스레드는 모래 시계가 오늘을 수행하지 않습니다.

(가능한 경우)을 알려줍니다. DocumentCompleted 이벤트입니다.

이벤트를 받으려면 메시지 루프를 펌프해야합니다.

+0

실제로 이전에 발생시킨'Navigated' 이벤트 이후에이 작업을 수행 할 수도 있습니다. 그것은 명시 적으로 언급되어 있습니다. – Jon

+0

아니요, 해당 이벤트는 다운로드가 시작되었음을 알려줍니다. 유효한 Document 속성이 없습니다. –

+0

'Document'는'Navigated' 이후 실제로 유효합니다. 탐색되지 않은 이벤트가 발생하면 새 문서가로드되기 시작합니다. 즉, 문서, [...] 속성을 통해로드 된 내용에 액세스 할 수 있습니다. * * – Jon

관련 문제