WebBrowser で、innterTextやリンクを取得する方法


環境: Visual Studio 2010 / WPF

インターネット上のHTMLより、リンクや文書を取得するには、単にWebClient でHTMLを取って来て、処理すればいいのですが・・・

とある理由でHTMLをブラウズしながら、ドキュメントに含まれるリンクなどを取得する必要があったので、WebBrowser を使って作ってみました。

WebBrowser は、裏側で mshtml の COMで実装されているので、ちょっと使い方が面倒だったのでメモしておきます。

 

参照の追加より、COM のmshtml.tlb を追加する。

image

 

WebBrowserに対して、Navigate でブラウズする。

Navigated イベントだと、document を完全に取得する前に、Navigated イベントが発生してしまう。

そこで、Document が完全にロードを完了したイベントとして、LoadCompleted を使用する。

 

例1: innterTextを取得する場合

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.webBrowser1.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(webBrowser1_LoadCompleted);
        }

        void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            if (webBrowser1.Document == null)
                return;

            mshtml.IHTMLDocument2 doc2 = (IHTMLDocument2)webBrowser1.Document;

            this.textBox2.Text = doc2.body.innerText;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            string url = this.textBox1.Text;
            this.webBrowser1.Navigate(url);
        }

例2: リンクの HTML をリストする場合

        void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            if (webBrowser1.Document == null)
                return;

            mshtml.IHTMLDocument2 doc2 = (IHTMLDocument2)webBrowser1.Document;

            foreach (mshtml.IHTMLElement elem in doc2.links)
            {
                this.textBox2.Text += ((mshtml.IHTMLAnchorElement)elem).href + Environment.NewLine;
            }
        }

実際の実行結果はこんな感じ。

image

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。