2015年6月6日土曜日

C#でIEを自動制御しよう (1) はじめに

【想定する読者】


  • Webページの構成、特に、フロントエンドの技術(HTML, CSS, JavaScriptなど)を多少理解できる程度の能力
  • JavaScriptやVBAなど他言語でDOMの直接操作が多少できる程度の能力

を備えたC#プログラマ

【はじめに】

この一連のblog記事では、C#でIE(Internet Explorer)を自動制御するためのサンプルコードをまとめています。本blogでは、今までにもVBAを用いたIEやFirefoxの自動制御方法についてまとめています。今回、VBAでできる範囲を越えて、「単体アプリケーションを開発したい」といった用途や、「既存のアプリケーションにIEの自動制御機能を付けたい」といった用途向けに、C#でも同じようにIEを自動制御できることをまとめることとしました。

 今回の記事では、筆者の勉強も兼ねて、SeleniumやWatiNなどのサードパーティのライブラリは用いず、素のIEを操作しています。IEは、Microsoft公式サイト(MSDN)の解説記事「Internet Explorer のアーキテクチャ」にもあるように、IEのウェブブラウザとしての主要動作を担うShDocVw.dll と、その下層に位置し、HTMLやCSSの解析・表示を担うMSHTML.dllとを有しています。本記事で、IEを操作するにあたっては、この2つのライブラリを参照・利用しています。(具体的手順は後述)

 本記事ではタイトルに「C#で」と銘打ってはいますが、IEを制御するコードの実態は 上記2つのライブラリ COM(Component Object Model)オブジェクトを呼び出しているだけです。このため、基本的にはVBAでのIE操作と変わるところは何らありません。ぶっちゃけて言えば、VBAを用いる場合との違いは、①クラス名・メソッド名などの細則が異なる場合がある、②ある程度正確にクラス名を把握しておいた方が良い、といったところくらいでしょうか。このため、C#プログラマの皆様にとって、初心者向けに書いた本記事が必要とされるのか、というと甚だ疑問が残るところではありますが、何から何まで1から調べるのはめんどくさいですし、こんなサンプルコード集があったら少しは楽かなということで筆を取った次第です。

※ 本心を言えば、VS(Visual Studio)でC#からIEの制御をテストするのが、めんどくさい。めんどくさすぎる。戻り値にdynamic型が多く、少しコードを書くたびに、クラス名・メソッド名を把握するためデバッガを走らせたり、リファレンス引きまくったりと、肝心のロジック作成がさっぱり進まず、心底アリエナイ!感じでした。おまけにクラスの数が多すぎて覚えてられない、ヤッテランナイ!というわけで、物忘れの激しい自分用にサンプルコードをまとめておきたかったというところです。正直、「みんな、どーやってIE制御してんの?VBAでやるより数倍めんどくさいよ、マジで。」という感じなので、「オメーが間違ってんだよ。正解はこれだッ!(ドヤァ」みたいな感じでツッコミを頂けますと大変嬉しく思います。特に、後半かなり怪しい感じですので、わりと真面目にツッコミ歓迎です。なお、「Selenium使え」はナシの方向でお願いします。

 最後になりましたが、本記事を通じて読者のみなさまのC#プログラミングが少しでも楽になれば幸いです。