この記事ではC#のSHDocVwでInternet Explorerを操作する際、複数のタブを操作する方法を記載しています。
「最初のタブでリンクを押したら別のタブが開いちゃったんだけど、これどうやって別タブの方を操作するの?」
って時にご利用ください。
ブラウザで別のタブ使用する
あんまり長々しくコードを書くとどこが重要なのか分かりにくいので最低限のコードにします。
下記、id="sample"のテキストを取得する最低限のコードです。
1 2 3 4 |
var IE = new SHDocVw.InternetExplorer(); var doc = IE.Document as mshtml.IHTMLDocument3; var text = doc.getElementById("sample").innerText; |
Internet Explorerを新しく作って~
現在のドキュメントを取得して~
id="sample"内にある文字列を取得します。
って感じのコードです。
通常はこれだけで大体の事が出来ます。
しかし、「自動操作している時にリンクがあって、開いたはいいけど最初のタブしか操作出来ない!」
って時にはこれ
「SHDocVw.ShellWindows」
Shellって単語は「骨組み」「外郭」って意味らしいので、
「SHDocVwの窓(ウインドウ)内の(骨組み)全てを取得する」
って意味だと思っています。
(間違えてたら指摘して頂けると助かります。)
これを使ったコードがこちら
1 2 3 4 5 6 7 8 9 10 11 |
var IE = new SHDocVw.InternetExplorer(); var doc = IE.Document as mshtml.IHTMLDocument3; var text = doc.getElementById("sample").innerText; SHDocVw.ShellWindows shell = new SHDocVw.ShellWindows(); foreach(SHDocVw.WebBrowser IE2 in shell) { var doc2 = IE2.Document as mshtml.IHTMLDocument3; var text2 = doc2.getElementById("").innerText; } |
shellWindowsで全てのタブを含むInternet Explorer内の情報を全て取得する。
foreachでタブの情報を1つ1つ渡して行き、id内の文字列を取得する。
左から順々に取得していくようなので、2番目のタブのみを操作したい時には
if(IE2.count == 2)
とか
IE2.LocationURL.Contains("指定の文字列")
なんかで分岐作ると良いと思う。
まとめ
今回の情報は私自身がブラウザ操作してる時にリンク開いちゃって、別タブとして操作したい!って状況に陥ったので調べた結果です。
情報探したんだけど別のタブの操作って記事自体ほぼ見つからなくて、英語の情報とかキーワード色々変えてみて見つけたんだけど、ちゃんとした解説した記事がなかったので今回作りました。
ブラウザの自動操作はネットショップ運営してると使用頻度高いので、ネットショップオーナーならば覚えておいて損はないんじゃないかな?
もっと良い方法とかあると教えて頂けると助かります(*´∀`)