webbrowser如何获取ajax动态加载的数据

代码:

InternetSetCookie(url, null, nn);
            webBrowser1.Navigate(url);
            webBrowser1.ScriptErrorsSuppressed = true;

获取的内容:

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if ((e.Url != webBrowser1.Url) || (webBrowser1.ReadyState != WebBrowserReadyState.Complete))
                return;
            //下面写你要在页面加载完毕后执行的代码。
            richTextBox2.Text = webBrowser1.Document.Body.InnerHtml;
        }

网页:

img


获取的网页:

img

页面加载完毕不一定ajax已经请求完毕并渲染数据,需要用Timer或者线程定时检查下dom对象是否已经有值,有值了在获取
示例代码如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~

img

        
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if ((e.Url != webBrowser1.Url) || (webBrowser1.ReadyState != WebBrowserReadyState.Complete))
                return;
            richTextBox2.Text = "文档已加载完毕,等待5s计时器完成后再获取内容";
            bool ajaxLoaded = false;
            new System.Threading.Thread(() => {

                while (true)
                {
                    this.Invoke(new Action(()=> {
                        if (webBrowser1.Document.GetElementById("aaa").GetAttribute("value") != "")
                        { //注意修改这里的代码,获取加载页面的控件,如工单号判断有值了才执行获取body.innerHTML操作

                            richTextBox2.Text = webBrowser1.Document.Body.InnerHtml;
                        }
                    }) );
                    if (ajaxLoaded) break;
                    System.Threading.Thread.Sleep(100);//100ms检查一次
                }
            
            }).Start();
            //下面写你要在页面加载完毕后执行的代码。


        }

要使用回调函数获取返回的json数据,再设置到控件。