Ожидание загрузки Ajax с помощью веб-браузера - PullRequest
1 голос
/ 22 июня 2011

Я очень новичок в .Net & C #, мне нужна помощь в загрузке страницы 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.

1 Ответ

0 голосов
/ 26 апреля 2012

Вы пробовали Ватин?Это бесплатная библиотека, которая помогает вам контролировать ajax при работе с веб-браузером

или

. Вы можете посмотреть этот ответ здесь, в стеке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...