C#を使ってInternet Explorerを自動操作します.
※もちろん.NET Frameworkの使える言語ならC#以外でも同じことが行えるはずです.
まず,次の2つのファイルへの参照を追加します.どちらもC:\Windows\System32にあると思います.
- mshtml.tlb
- shdocvw.dll
IEの自動化に使うクラスは,InternetExplorer Object,Interfaces and Scripting ObjectsのリストにあるIHTML*
というクラス達になります.
データ型のよくわからないオブジェクトを沢山扱うことになりますので,dynamicキーワードを使うと便利です.こちらの記事を必ず確認して下さい.
後は,簡単な使い方をメモしておきます.
- インターネット・エクスプローラを起動・終了を行う.
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer(); ie.Visible = true; ie.Quit();
- ページの移動を行う.
ページ移動の完了を知るにはie.Navigate("http://www.bing.com/");
ie.NavigateComplete2
イベントをキャッチ. - リンクを探して押したい.
foreach (dynamic link in ie.Document.links) { if (link.href == "http://jp.msn.com/") { link.click(); // ie.Navigate(link.href); という方法もある break; } }
- フォームを自動入力したい.
foreach (dynamic form in ie.Document.forms) { if (form.action == "/search") { foreach (dynamic element in form.Descendants) //Descendantsはchildrenプロパティを使って自分で実装します { switch ((string)element.getAttribute("name")) { case "q": element.setAttribute("value", "テスト"); break; case "go": element.click(); return; } } } }
こんにちは てんてんと申します。
返信削除NavigateComplete2の
イベントをキャッチするサンプルがあるとすごく助かります。
>てんてんさん
返信削除バタバタしていて返信が遅くなってしました.すいません
イベントをキャッチする方法についてはMSDN等が参考になると思います.
また,イベントの発生するタイミングはIE コンポーネントにおけるイベントの発生順序に分かりやすいまとめを発見しました.
最後に,この記事のサンプルですが,dynamicは使わない方が良いです.(dynamicとCOMとメモリ リーク)
私の不注意で修正するのを忘れていました.