获取Webbrowser C#中的网页源

时间:2012-05-28 07:40:24

标签: c# browser webrequest

目前我在WebBrowser组件中加载了一个网站,该组件不断更改页面内某个<a>内的内容。为了让我获取数据,我必须每5秒创建一次另一个W​​ebRequest,只是为了刷新数据(我认为它们被称为动态页面)。我已经尝试从WebBrowser(WebBrowser.DocumentText)获取数据,但值保持不变,即使我很确定它已更改,因为我可以看到它已更改。我认为webrequest每5秒占用一次不必要的内存空间,这可以更轻松。

你们可能知道我这样做的方法吗?

2 个答案:

答案 0 :(得分:2)

在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。

答案 1 :(得分:0)

您可以尝试通过JavaScript获取源代码。

使用InvokeScript方法执行return document.documentElement.outerHTML;

这将返回Object,您应该可以将其转换为String