webBrowser可以获取ajax生成的内容吗?

shijie03 2012-09-13 04:50:29
webBrowser可以获取ajax生成后内容的HTML代码吗?如果可以请问如何做?
...全文
515 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
swuxd 2014-02-18
  • 打赏
  • 举报
回复
引用 5 楼 findcaiyzh 的回复:
我在另一个帖子里写的测试代码 http://topic.csdn.net/u/20120820/10/f2f21a45-5395-4cef-8d08-34e2022be8f1.html


       System.Timers.Timer timer = null;

        private void Form1_Load(object sender, EventArgs e)
        {
            string url = "http://stock.finance.sina.com.cn/hkstock/finance/01398.html";

            webBrowser1.Navigate(url);
            timer = new System.Timers.Timer(1000);
            timer.AutoReset = false;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
            
        }

        public delegate void GetDataHandler();

        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Invoke(new GetDataHandler(getData));

            timer.Start();
        }


         private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //避免webbroswer.DocumentCompleted被多次引发
            if ((e.Url != webBrowser1.Url) || (webBrowser1.ReadyState != WebBrowserReadyState.Complete))
                return;
            //下面写你要在页面加载完毕后执行的代码。

            getSelectedCtrl();
        }

        private void getSelectedCtrl()
        {
            System.Windows.Forms.HtmlDocument doc = this.webBrowser1.Document;
            System.Windows.Forms.HtmlElementCollection selectCtrls = doc.GetElementsByTagName("select");
            string attName;

            foreach (System.Windows.Forms.HtmlElement selectCtrl in selectCtrls)
            {
                attName = selectCtrl.GetAttribute("table");
                if (attName.Equals("tableGetBalanceSheet"))//如果table属性是资产负债表的话,模拟引发“报表类型”的选择控件
                {
                    foreach(HtmlElement option in selectCtrl.Children)
                    {
                        if(option.GetAttribute("value") == "zero")
                        {
                            option.SetAttribute("selected", "selected");
                            break;
                        }
                    }
                    selectCtrl.RaiseEvent("onchange");
                    timer.Start();
                    return;

                }

            }

        }
我试了一下这代码 怎么得到的源代码数据还是原来网页的呢
宝_爸 2012-09-18
  • 打赏
  • 举报
回复
我在另一个帖子里写的测试代码
http://topic.csdn.net/u/20120820/10/f2f21a45-5395-4cef-8d08-34e2022be8f1.html



System.Timers.Timer timer = null;

private void Form1_Load(object sender, EventArgs e)
{
string url = "http://stock.finance.sina.com.cn/hkstock/finance/01398.html";

webBrowser1.Navigate(url);
timer = new System.Timers.Timer(1000);
timer.AutoReset = false;
timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);

}

public delegate void GetDataHandler();

private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
Invoke(new GetDataHandler(getData));

timer.Start();
}


private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//避免webbroswer.DocumentCompleted被多次引发
if ((e.Url != webBrowser1.Url) || (webBrowser1.ReadyState != WebBrowserReadyState.Complete))
return;
//下面写你要在页面加载完毕后执行的代码。

getSelectedCtrl();
}

private void getSelectedCtrl()
{
System.Windows.Forms.HtmlDocument doc = this.webBrowser1.Document;
System.Windows.Forms.HtmlElementCollection selectCtrls = doc.GetElementsByTagName("select");
string attName;

foreach (System.Windows.Forms.HtmlElement selectCtrl in selectCtrls)
{
attName = selectCtrl.GetAttribute("table");
if (attName.Equals("tableGetBalanceSheet"))//如果table属性是资产负债表的话,模拟引发“报表类型”的选择控件
{
foreach(HtmlElement option in selectCtrl.Children)
{
if(option.GetAttribute("value") == "zero")
{
option.SetAttribute("selected", "selected");
break;
}
}
selectCtrl.RaiseEvent("onchange");
timer.Start();
return;

}

}

}
宝_爸 2012-09-18
  • 打赏
  • 举报
回复
可以,不过 控件没有办法知道 javascript的事件,DocumentComplete也不会发生,只能自己写个Timer去检查内容是不是改变了。
yonglaixiazaide 2012-09-18
  • 打赏
  • 举报
回复
必须可以,webBrowser本身就可以显示ajax请求的html啊,如果单纯的ajax信息,你可以找到ajax请求的UR了就可以了~

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧