C# 在Webbrowser C中获取网页源#

C# 在Webbrowser C中获取网页源#,c#,browser,webrequest,C#,Browser,Webrequest,目前,我在WebBrowser组件中加载了一个网站,该组件不断更改页面中某个的内容。为了获取数据,我必须每5秒创建一个WebRequest,只是为了刷新数据(我认为它们被称为动态页面)。我曾尝试从WebBrowser(WebBrowser.DocumentText)获取数据,但值保持不变,尽管我非常确定它发生了变化,因为我可以看到它发生了变化。我认为每5秒的webrequest会占用不必要的内存空间,这样做会更容易 你们知道我该怎么做吗?你们可以尝试通过JavaScript获取源代码 使用该方法

目前,我在WebBrowser组件中加载了一个网站,该组件不断更改页面中某个
的内容。为了获取数据,我必须每5秒创建一个WebRequest,只是为了刷新数据(我认为它们被称为动态页面)。我曾尝试从WebBrowser(
WebBrowser.DocumentText
)获取数据,但值保持不变,尽管我非常确定它发生了变化,因为我可以看到它发生了变化。我认为每5秒的webrequest会占用不必要的内存空间,这样做会更容易


你们知道我该怎么做吗?

你们可以尝试通过JavaScript获取源代码

使用该方法执行
return document.documentElement.outerHTML


这将返回一个
对象
,您应该能够在Winforms中键入并转换为
字符串

猜测。您需要使用Document属性读回DOM。这里有一个例子。启动一个新的Winforms项目,并在表单上放置一个WebBrowser。然后是标签和计时器。使代码如下所示:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        webBrowser1.Url = new Uri("http://stackoverflow.com/questions/10781011/get-source-of-webpage-in-webbrowser-c-sharp");
        webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
        timer1.Interval = 100;
        timer1.Tick += new EventHandler(timer1_Tick);
    }

    void timer1_Tick(object sender, EventArgs e) {
        var elem = webBrowser1.Document.GetElementById("wmd-input");
        label1.Text = elem.InnerText;
    }

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
        timer1.Enabled = true;
    }
}
浏览器将导航到您的问题。在答案框中键入内容,注意标签如何显示您键入的内容


您需要调整此代码以使用特定的网页,更改“wmd input”元素名称。使用DOM检查工具查找名称。我喜欢Firebug。

不幸的是,
WebBrowser.DocumentText
在值更改时不会更改。我不明白为什么没有。是不是
Refresh()
,你每5秒钟打一次电话?哦,还有,有没有办法不过滤掉特殊字符?我只是注意到它过滤掉了“&”,这不是什么大问题,但如果它没有过滤掉,那就太好了。