2015年6月6日土曜日

C#でIEを自動制御しよう (7) フォーム(テキストボックス)に文字を入力する

■フォーム(テキストボックス)に文字を入力する

表示しているHTMLドキュメントの情報は、Documentプロパティで取得可能です。ただし、そのままではdynamic型になるため、VSの補完を有効にするために、利用する際には型を指定した方が良いように思います。下記では、as演算子でmshtml.IHTMLDocument3 に変換しています。

 Documentプロパティ自体は、 IHTMLDocument, IHTMLDocument2, IHTMLDocument3の3つのインターフェースを実装しているため、必要なメソッドに応じてこれらのいずれかに変換すると良いです。個人的な感覚になりますが、IHTMLDocumentは機能がなさすぎて使い道なし、IHTMLDocument3は、DOMをゴリゴリ直接操作したい人向け、IHTMLDocument2は手軽にページの各要素を操作したい人向け(IHTMLDocument3のラッパー的な位置づけ)、という印象です。

 以下のサンプルコードでは、getElementByIdでグーグルの検索ボックスを指定し、innerTextで文字列を代入しています。 詳しくは、mshtml.IHTMLDocument3の操作は、MSDNのページ(IHTMLDocument3 interface (Windows))を参照してください。取得した要素の操作はjavascriptでのDOM操作と変わるところがないので、説明は省略します。

サンプルコード

補足説明

上記のgetElementByIdや、getElementsByName, getElementsByTagNameで取得した要素は、そのままではdynamic型になりますが、mshtml.IHTMLElementもしくは、これが実装されたクラスである mshtml.HTMLSelectElement, mshtml.HTMLInputElementなどに変換できます。この実装されたクラスがとんでもない数ある (* https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx )ので、慣れるまではわりと手探りになります。ジーザス。