2012-09-25 102 views
1

我有一個帶有瀏覽器控件的窗體。 (此控件使用IE9,因爲我在註冊表編輯器上設置了值)WebBroswer_DocumentCompleted事件不起作用

此Web瀏覽器導航到特定的URL並填充HTML頁面上的所有字段並提交它們,然後顯示結果頁面。 我的問題是,我只想知道這個reslut頁面何時完全加載或完成,以便我可以獲取一些信息。 我使用WebBroswer_DocumentCompleted事件,該事件適用於第一頁,但不適用於結果頁面,因爲它在加載頁面 頁面之前觸發。

我試過其他的解決方案,它是檢查結果頁面內的div標籤(這個標籤只在結果頁面完全加載時出現),它的工作原理並不總是如此。

我的代碼:

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 
      } 
     }} 

該div id爲 「Summary_Views」。 我可以爲您提供該網站的需求鏈接,這只是用於研究目的的BLAST工具和數據庫網站。

回答

1

最後我解決了我的問題。我從工具箱中放置了一個計時器控件,並將其時間間隔設置爲200ms,並將其Autoreset屬性設置爲false。我設置了一個tick事件,它有一個代碼來檢查每200ms是否已經加載這個div,之後,Autoreset屬性設置爲true.This解決方案工作完美:)

1

你知道,如果有框架?如果是這樣,那麼請說出來,所以人們可以幫助。如果不是那麼說,那麼人們可以提供替代品。

我的猜測是內容是由JavaScript生成的。如果是,那麼在JavaScript執行之前文檔已經完成,並且您需要以某種方式等待JavaScript完成。解決方案取決於網頁。因此,您可能需要處理多個文檔完成以用於診斷目的,並嘗試確定是否有方法知道您需要哪一個。

+0

我同意你的看法,所以我認爲我即使在DocumentComplted事件觸發後,也應等待頁面完全加載。所以我該如何等待?我使用Thread.Sleep()函數,但它停止頁面和代碼的整個加載。 –

+0

我已經做了一個功能,找到這個Div標籤,並將此函數綁定到一個新線程(通過使用ThreadStart委託)。我只是想啓動這個新線程,並讓DocumentCompleted事件觸發結果頁後休眠幾秒鐘我可以很容易地找到Div標籤。 –

+0

我比較新的Stackoverflow,所以我沒有注意到這個答覆之前。有一種非常簡單的方法可以爲DocumentComplete事件創建一個處理程序;只需雙擊設計器中的WebBrowser控件即可。 DocumentComplete事件是WebBrowser控件的設計器中的默認事件。 –