WebBrowserコントロールによるWebアクセス

.NET Framework2.0には、WebBrowserコンポーネントが追加され、簡単にWebにアクセスし情報を取得したりWebページを表示できるようになりました。AxWebBrowserのようにdllを作る必要もありませんし、HTMLDOMのクラスも用意されたので、DOMを使うのに巨大なdllを添付する必要もありません。
とりあえず、このWebBrowserコンポーネントによるWebアクセスとHTML DOMHtmlDocumentクラス)によるページ内HTMLの処理を試してみましょう。

WebBrowserコントロール

WebBrowserコントロールの使用法は、基本的に他のコントロールと同じです。適当なコンテナにAddして、後はイベントを登録したりプロパティやメソッドで操作します。SDKのドキュメントを読むと、指定アドレスを読み込むNavigateメソッドやページ全体のソースを取得するDocumentTextプロパティ、ページ内のHTML要素(HTML DOM)にアクセスするDocumentプロパティをはじめ様々な機能が用意されているので、自作プログラムにWebアクセス機能を組み込む際にはかなり役に立ちそうですね。

ただ、イベントのタイミングはちょっとわかりにくいかも。私も以前IEコンポーネントで「(画像や外部リソースも含め)ページ全体が表示された」時点で処理をしたい、と思っていろいろ試行錯誤したのですが、なかなかうまくいきませんでした……。

とりあえず、今回は読み込んだWebページのURLを表示してみることにしたので、DocumentCompletedイベントハンドラ内でその処理(現在のURLの取得と表示)を行うことにします。

  // WebBrowser生成
  m_wbDoc = new WebBrowser();

  // DocumentCompletedイベントハンドラ登録
  m_wbDoc.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocCompleted);

  Controls.Add(m_wbDoc);

DocumentプロパティからのDOMアクセス

次に、Documentプロパティで取得できるHtmlDocumentオブジェクトを使ってページ内のHTML要素を取得してみましょう。HtmlDocumentは、DOMのインターフェースを持っているのでタグ名やID、クラスなどでHTML要素(単独のHTML要素やリスト)を取得できるのですが、今回は「ページ内のリンク一覧」を取得し、そのアドレスを文字列化してみました。

  // 現在のページ内リンクのコレクション取得
  HtmlElementCollection hecList = m_wbDoc.Document.Links;

  String stView = "";

  int i = 0;

  // リンクのコレクションからURLリスト文字列作成
  foreach (HtmlElement elm in hecList) {

      // HTML要素のhref(リンク先)属性処理
      if (elm.GetAttribute("href") != null) {

          stView += i.ToString();
          stView += " - " + elm.GetAttribute("href").ToString();
          stView += "\r\n";

          i++;

      }

  }

プログラム

今回のプログラムは、.NET Framework2.0を使ったC#のプログラムです。起動したら、上のほうの入力欄に適当なアドレスを入力し、リターンキーを押してください。その後、「文書ソース」「リンク一覧」ボタンでページのソースやページ内のリンク一覧が下の方のテキスト領域に表示されます。

プログラムソース表示


Windowsプログラミング実験室 > プログラミング資料庫