2012-05-28 44 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