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請求。
任何有關它的解決方案嗎? – Kiquenet
你嘗試過Watin嗎? – Smith