1

現在、WebBrowserコンポーネントにWebサイトをロードしています。これ<a>により、ページ内の特定の内部で変更が行われます。データを取得するには、データを更新するためだけに、5秒ごとに別のWebRequestを作成する必要があります(動的ページと呼ばれていると思います)。WebBrowser()からデータを取得しようとしましたWebBrowser.DocumentTextが、変更されたことがわかるので、変更されたと確信していても、値は同じままでした。5秒ごとのwebrequestは不要なメモリスペースを占有し、これはより簡単に実行できると思います。

皆さんは私がこれを行う方法を知っているかもしれませんか?

4

2 に答える 2

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;
    }
}

ブラウザが質問に移動します。[回答]ボックスに何かを入力します。入力した内容がラベルにどのように表示されるかに注意してください。

特定のWebページで機能するようにこのコードを微調整し、「wmd-input」要素名を変更する必要があります。DOM検査ツールを使用して名前を見つけます。Firebugが好きです。

于 2012-05-28T08:55:44.593 に答える
0

JavaScriptを介してソースを取得しようとすることができます。

メソッドを使用しInvokeScriptて実行するreturn document.documentElement.outerHTML;

これにより、Objectにキャストを入力できるはずのが返されますString

于 2012-05-28T07:57:29.203 に答える