.NET Framework2.0には、WebBrowserコンポーネントが追加され、簡単にWebにアクセスし情報を取得したりWebページを表示できるようになりました。AxWebBrowserのようにdllを作る必要もありませんし、HTMLのDOMのクラスも用意されたので、DOMを使うのに巨大なdllを添付する必要もありません。 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#のプログラムです。起動したら、上のほうの入力欄に適当なアドレスを入力し、リターンキーを押してください。その後、「文書ソース」「リンク一覧」ボタンでページのソースやページ内のリンク一覧が下の方のテキスト領域に表示されます。 |