【VB.NET】【WPF】WebBrowser コントロールからテキストを取得する

VB.NET + WPF で、WebBrowser コントロールに表示されている HTML のテキストを取得する方法です。

結論

いきなり結論を言うと、

WebBrowserObject.Document.body.innerText で取得できます。(WebBrowserObject は、WebBrowser のインスタンス)

MEMO

テキストの読み取りをする場合は 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)

 

コメントの投稿

avatar
  購読する  
通知を受け取る対象