weixin_43975635
2021-09-24 10:28
采纳率: 100%
浏览 39

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

  • 好问题 提建议
  • 收藏

2条回答 默认 最新

  • CSDN专家-showbo 2021-09-24 12:21
    已采纳

    页面加载完毕不一定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();
                //下面写你要在页面加载完毕后执行的代码。
    
    
            }
    
    已采纳该答案
    评论
    解决 2 无用
    打赏 举报
  • 要使用回调函数获取返回的json数据,再设置到控件。

    评论
    解决 1 无用
    打赏 举报

相关推荐 更多相似问题