MSHTMLライブラリ と Microsoft HTML Object Library と SHDocVwライブラリ
はじめに
Visual Studio .NET 2003 では、HTML コードにアクセスするために、次のようなオブジェクトモデルが用意されています。使用するには、Microsoft HTML Object Library(COM)、MSHTMLライブラリ(.NET)、SHDocVwライブラリ(COM)を参照設定してプロジェクトに組み込む必要があります。
Microsoft HTML Object Library
HTML DOM にアクセスするためのオブジェクトライブラリです。
Web ページをダウンロードする方法〜 MSHTML 編〜 で同オブジェクトモデルの具体的な使用例があります。
MSHTMLライブラリとは
MSHTML とは、Internet Explorer(IE) の機能を部品化(コンポーネント化)したものです。このコンポーネントを利用すると、HTML ファイルというプレーンなテキスト文書をオブジェクトとして扱うことができます。
以下は、MSDN からの引用です(Visual C# .NET による MSDNAA おもしろプログラミング : 第 2 回 VC# で MSHTML)。
MSHTML は、大きく分けて HTML パーサと HTML レンダリングエンジンから構成されています。HTML パーサは、HTML の構文を解析し、プログラムから利用しやすいように HTML 文書の情報を階層構造化します。また、 HTML レンダリングエンジンは、人間が解読しにくいタグ文書を表や画像などの形にレンダリングし、人間が閲覧しやすい形で表示を行います。
SHDocVwライブラリとは
SHDocVw とは、IE のブラウザ機能にアクセスするためのコンポーネントです。このコンポーネントを利用すると、IE を操作することができます。
MSHTMLライブラリを使いこなすために役立つページ
今紹介したVisual C# .NET による MSDNAA おもしろプログラミング : 第 2 回 VC# で MSHTML や Visual C# .NET による MSDNAA おもしろプログラミング : 第 3 回 VC# で MSHTML テクノロジ は、サンプルコードが掲載されているだけでなく、理論面も解説されていてためになります。HTML パーサ、HTML レンダリングエンジンについてや、HTML パーサと DOM(Document Object Model) との関係など興味深いテーマが取り上げられています。
サンプルコード
Web ブラウザコントロール(SHDocVwライブラリ)と併用する
MSHTMLライブラリとSHDocVwライブラリとを利用すれば、IE を起動して特定のページを開き、開いたページを操作するなどといったことができます。ネット上でもこのサンプルは比較的よく紹介されています。
参考のため、私が実際に使っているサンプルコードを書いておきます。開発言語は、VB.NET です。なお、サンプルコードでは、IE のインスタンスを作成するのに、CreateObeject 関数を使っていますが、これは、「dim objIE as New SHDocVw.InternetExplorer.application」 とした方がいいかもしれません。
Dim objIE As SHDocVw.InternetExplorer
objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
'****URLを指定し、Web ページを開く
objIE.Navigate("(url を記述)")
'****ページ読み込みまで待機
Do While objIE.Busy = True
System.Windows.Forms.Application.DoEvents()
Loop
'****開いたページをオブジェクトとして操作する(例)
Dim objHtml As mshtml.HTMLDocument
Dim objTable As mshtml.HTMLTable
objHtml = objIE.Document
'****id が"MenuTable"であるテーブルタグを探し出し、特定の処理をする
For Each objTable In objHtml.all.tags("table")
If objTable.id = "MenuTable" Then
(操作内容)
End If
Next
MSHTMLライブラリの HTML パーサ機能を単体で利用する
以上のように、MSHTMLライブラリは、通常SHDocVwライブラリと併用して利用されていることが多いようですが、HTML パーサ単体として使用することももちろん可能です。
MSHTMLライブラリの HTML パーサ機能だけを利用したコード例としては、C#/mshtml - JomoLabo が参考になります。