VB.NET + WPF で、WebBrowser コントロールに表示されている HTML のテキストを取得する方法です。
結論
いきなり結論を言うと、
WebBrowserObject.Document.body.innerText で取得できます。(WebBrowserObject は、WebBrowser のインスタンス)
テキストの読み取りをする場合は innerText のかわりに outerText を使っても同じです。
innerText (タグの内側のテキスト)と outerText(タグを含めたテキスト)の使い分けは、書き込みをするときに意味を持ちますが、ここでは詳しく触れません。
上記のコードは正常に動作すると思いますが、Document が Object 型であるため、それに続くインテリセンスが機能しません。インテリセンスを機能させるには、参照に Microsoft.mshtml を追加して、Document の型をキャストする必要があります。
Microsoft.mshtml の追加
Visual Studio に Microsoft.mshtml を追加するには、下記の2種類の方法があります。
- COM を参照する方法
- .NET アセンブリを参照する方法
参照後の両者の本質的な機能は同じですが、下記のような違いがあります。
- COM 参照は .NET Framework が登場する以前からの伝統的なやり方。それを .NET Framework から参照して使用する場合、相互運用機能アセンブリ(IA = Interop Assembly)と呼ばれるラッパーライブラリが必要となる。(Visual Studio から参照する場合、開発環境ごとに自動的に生成される)
- .NET アセンブリとしての Microsoft.mshtml はプライマリ相互運用機能アセンブリ(PIA = Primary Interop Assembly)であり、PIA がグローバルアセンブリキャッシュ(GAC)に登録されている場合は、IA よりも優先して使用される。
従って、Visual Studio から利用する場合は、.NET アセンブリの Microsoft.mshtml を利用したほうが良さそうです。
一応、それぞれの参照方法を後述します。
COM を参照する方法
Visual Studio の参照マネージャーの[COM]から Microsoft HTML Object Library を追加します。
Visual Studio 上では下図のように追加されます。
.NET アセンブリを参照する方法
Visual Studio の参照マネージャーの[アセンブリ]>[拡張]から Microsoft.mshtml を追加します。
私の Visual Studio ではなぜか2つの Microsoft.mshtml がありました。
1つ目はこちら。
2つ目はこちら。
でも参照に追加すると、いずれの Microsoft.mshtml も下図のように同じパスを指していました。
Document の型をキャストする
Microsoft.mshtml を参照に追加したら、下記のように、Document を mshtml.HTMLDocument 型にキャストすると、Document に続くインテリセンスが機能するようになります。
CType(WebBrowserObject.Document, mshtml.HTMLDocument).body.innerText
または下記のようにしても同じですね。
Dim doc As mshtml.HTMLDocument = Me.body.Document Console.WriteLine(doc.body.innerText)