none
C# webbrowser控件,获取页面JS更新的内容问题 RRS feed

  • 问题

  • 我最近用C#写个小程序用到 webbrowser控件显示网页,然后想取到页面上显示的数据,这部分数据是点击搜索按钮,由JS执行后台方法更新的,在页面源文件里面是看不到这个数据的,但是在浏览器页面上是可以看到这些数据的。我该怎么取到这个数据呢?
    • 已更改类型 TigerLiuw 2012年2月28日 2:49 比较难解决的问题
    2012年2月28日 1:55

答案

  • 你好, 我有尝试用这个方法,结果没有触发事件里的方法,并没有获得到数据。不知前辈有木有测试过。

    你好,

    你可以获得Ajax异步请求的数据,但是你不能获得Ajax异步响应的数据包. 这点,似乎Internet EXplorer也是这样的. 所以, 你的这个问题,目前只能说是无能为力.

    但是,如果你觉得这个功能非常重要,倒是可以考虑下在你的本地做一个HTTP的拦截服务, 专门用于拦截你的HTTP请求响应的数据包. 这是这样一来, 开发难度和工作量增加了.


    Knowledge will change the destiny.

    • 已建议为答案 Neddy Ren 2012年3月5日 9:21
    • 已标记为答案 Neddy Ren 2012年3月7日 9:03
    2012年3月5日 3:17

全部回复

  • 当你点击搜索按钮后,整个WebBrowser里的Document在获取数据后都会重新更新,只要在DocumentComplete里取出更新的数据不就可以了。

    HtmlElementCollection html = webBrowser1.Document.CreateElement("elementTag").All;

    当你获得了更新的所有THML的时候,还有什么数据是你获取不到的呢!

    Knowledge will change the destiny.

    • 已建议为答案 Neddy Ren 2012年2月29日 7:37
    • 取消建议作为答案 TigerLiuw 2012年3月1日 3:25
    2012年2月29日 7:36
  • TylerGG:

          当你获得了更新的所有THML的时候,还有什么数据是你获取不到的呢!  

          这个页面用的是updatepanel更新的数据,页面文件HTML在更新前后源文件的内容都是一样的,没有变化,所以无法获得更新后的数据。所以需要捕获在点击搜索按钮后服务端给WebBrowser回发的respones里才有这些数据流,但是源文件里还真没有的。明白我说的意思没?我该如何截取服务端回发的数据流。

    2012年3月1日 3:29
  • TylerGG:

          当你获得了更新的所有THML的时候,还有什么数据是你获取不到的呢!  

          这个页面用的是updatepanel更新的数据,页面文件HTML在更新前后源文件的内容都是一样的,没有变化,所以无法获得更新后的数据。所以需要捕获在点击搜索按钮后服务端给WebBrowser回发的respones里才有这些数据流,但是源文件里还真没有的。明白我说的意思没?我该如何截取服务端回发的数据流。

    请看这个帖子:

    http://www.cnblogs.com/eaglet/archive/2008/11/19/1336347.html 


    Knowledge will change the destiny.

    2012年3月1日 6:18
  • 我之前有尝试过这个方法,但是报错,如下图,还没找到解决这个问题的办法。另外我有了解到,这个方法是对客户端POST给服务端的数据截获,我需要的是post后服务端返回来的数据,不知道是不是这个方法来解决这个问题。
    2012年3月1日 8:24
  • 你好,

    这是因为你的webBrowser1还没有加载过任何网站地址。请在Form1_Load中的第一行执行Navigate(..) 方法。 比如:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.webBrowser1.Navigate("http://www.microsoft.com");
        wb = (SHDocVw.WebBrowser)this.webBrowser1.ActiveXInstance;
        wb.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(wb_BeforeNavigate2);
    }


    Neddy Ren[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月1日 8:51
  • 你好, 我有尝试用这个方法,结果没有触发事件里的方法,并没有获得到数据。不知前辈有木有测试过。
    2012年3月2日 9:10
  • 你好, 我有尝试用这个方法,结果没有触发事件里的方法,并没有获得到数据。不知前辈有木有测试过。

    你好,

    你可以获得Ajax异步请求的数据,但是你不能获得Ajax异步响应的数据包. 这点,似乎Internet EXplorer也是这样的. 所以, 你的这个问题,目前只能说是无能为力.

    但是,如果你觉得这个功能非常重要,倒是可以考虑下在你的本地做一个HTTP的拦截服务, 专门用于拦截你的HTTP请求响应的数据包. 这是这样一来, 开发难度和工作量增加了.


    Knowledge will change the destiny.

    • 已建议为答案 Neddy Ren 2012年3月5日 9:21
    • 已标记为答案 Neddy Ren 2012年3月7日 9:03
    2012年3月5日 3:17
  • 很抱歉,之前我也错认为是拦截发送请求。

    如果是异步Ajax响应的话,确实不能轻易实现!


    Neddy Ren[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月7日 9:03