【问题标题】:Waiting for Ajax Load Using Web Browser Control使用 Web 浏览器控件等待 Ajax 加载
【发布时间】:2011-06-22 03:48:21
【问题描述】:

我是 .Net 和 C# 的新手,需要帮助才能通过 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

private void waitTillLoad(WebBrowser 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 请求的确切加载时间。

【问题讨论】:

    标签: ajax browser controls


    【解决方案1】:

    你试过瓦丁吗?它是一个免费库,可帮助您在使用网络浏览器时监控 ajax

    您可以在堆栈上查看this 答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2016-01-30
      • 2017-04-17
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2013-05-08
      相关资源
      最近更新 更多