2011-06-22 30 views
2

我對.Net & C#很陌生,需要通過Web瀏覽器控件加載Ajax頁面。使用Web瀏覽器控件等待Ajax加載

下面是我正在使用的代碼,導航到登錄後,我正在進行搜索頁面,它具有ajax調用。

private void searchNCPPageClick(string msg) 
    { 
     log.Debug("Processing Navigation to the NCP Search Project page..."); 
     try 
     { 
      HtmlElementCollection elems = this.webBrNcp.Document.GetElementsByTagName("html")[0].All;     
      foreach (HtmlElement elem in elems) 
      { 
       if (!(elem.DomElement.GetType().ToString().Equals("mshtml.HTMLAnchorElementClass"))) 
       { 
        continue; 
       } 

       if (elem.InnerHtml != null && elem.InnerHtml.Equals(IConstants.STR_SEARCH_PROJECT)) 
       { 
        elem.InvokeMember("click"); 

        waitTillLoad(this.webBrNcp); 
        this.m_pageStatus = true;       
        this.m_page = this.webBrNcp.Document.GetElementsByTagName("html")[0].OuterHtml; 
        break; 
       } 
      } 
      log.Debug("The Search Project Page navigated successfully."); 
     }catch(Exception ex) 
     {     
      log.Error("Error occurred while navigating Search Project page =" + ex.Message); 
      string errMsg = String.Format("Error occurred while navigating Search Project page in {0} - {1}", "searchNCPPageClick", ex.Message); 
      throw new ScreenScrapeException(errMsg, ex); 
     } 
    } 

方法waitTillLoad從this

私人無效waitTillLoad取(web瀏覽器webBrControl) {

 WebBrowserReadyState loadStatus; 
     //wait till beginning of loading next page 
     int waittime = 100000; 
     int counter = 0; 
     while (true) 
     { 
      loadStatus = webBrControl.ReadyState; 

      Application.DoEvents(); 

      if ((counter > waittime) || (loadStatus == WebBrowserReadyState.Uninitialized) || (loadStatus == WebBrowserReadyState.Loading) || (loadStatus == WebBrowserReadyState.Interactive)) 
      { 
       break; 
      } 
      counter++; 
     }  

     //wait till the page get loaded. 
     counter = 0; 
     while (true) 
     {    
      loadStatus = webBrControl.ReadyState; 
      Application.DoEvents(); 

      if (loadStatus == WebBrowserReadyState.Complete && webBrControl.IsBusy != true) 
      { 
       break; 
      } 
      counter++; 
     } 
    } 

這工作得很好,但我想知道,以確定確切的加載時間的ajax請求。

+0

任何有關它的解決方案嗎? – Kiquenet

+0

你嘗試過Watin嗎? – Smith

回答

0

您是否嘗試過Watin?它同時與網頁瀏覽器工作的一個免費的圖書館,可幫助您監控AJAX

你可以看看this答案在這裏堆