2012-05-28 45 views
1

目前我有一个网站加载在WebBrowser组件中,它不断更改页面内某个<a>内部的内容。为了让我获得数据,我必须每5秒创建一次WebRequest,以刷新数据(我认为它们被称为动态页面)。我尝试从WebBrowser(WebBrowser.DocumentText)获取数据,但是值仍然保持不变,即使我确信它已更改,因为我可以看到它发生了更改。我认为webrequest每5秒会占用不必要的内存空间,而且这可以更容易完成。在Webbrowser C中获取网页源代码#

你们可能知道一个办法让我这么做吗?

+0

它是'刷新()',你每5秒打电话? – MartinHN

+0

查看我的更新回答 – MartinHN

回答

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。

+0

工程就像一个魅力!正是我需要的,非常感谢! – Infernus

+0

哦,有什么办法可以不过滤特殊的字符?我只是注意到它过滤掉了'&',这并不是什么大问题,但如果不是这样,它会很好。 – Infernus

0

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

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

这将返回一个Object,你应该能够类型转换为一个String

+0

不幸的是,值改变时'WebBrowser.DocumentText'不会改变。我不明白为什么没有。 – Infernus

+0

哦,对不起。 2分钟,我可能会以一些模糊的方式做到这一点... – MartinHN

+0

现在想出来,所以没关系! – Infernus