<link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=6549724036207680656&amp;zx=de779642-2f7e-4395-a5a7-135811de2179' rel='stylesheet'/>

2015年6月6日土曜日

C#でIEを自動制御しよう (10) セレクトボックス(メニュー)の選択肢を選択する

■セレクトボックス(メニュー)の選択肢を選択する

ドロップダウンリストととも呼ばれるタイプのアレ、の選択肢を選択します。ざっと試してみた感じでは3通りほどやり方がありました。

サンプルコード

public void SelectDropDownList()
{
var IE = new SHDocVw.InternetExplorer();
IE.Visible = true;
object URL = "http://law.e-gov.go.jp/";
IE.Navigate2(ref URL);
IE.Wait();
var doc = IE.Document as mshtml.IHTMLDocument3;
{//1つ目の方法
var dropdown = doc.getElementsByName("Y_TYPE").item(index: 0) as mshtml.HTMLSelectElement;
dropdown.selectedIndex = 1; //Indexで指定する場合
}
{//2つ目の方法
var dropdown = doc.getElementsByName("Y_HOREI").item(index: 0) as mshtml.HTMLSelectElement;
dropdown.setAttribute("value", "5"); //optionのvalue で選択する場合 (* valueはソースコードを確認する必要あり)
}
{//3つ目の方法
var dropdown = doc.getElementsByName("Y_TANI").item(index: 0) as mshtml.HTMLSelectElement;
foreach (mshtml.HTMLOptionElement option in dropdown.options)
{
if (option.innerText.Contains("本則中の条単位"))//テキストベースで選択する場合
{
option.setAttribute("selected", "selected");
}
}
}
}
view raw test.cs hosted with ❤ by GitHub

補足説明

1つ目は、要素をmshtml.HTMLSelectElementに変換後、selectedIndexプロパティを使う方法。目視でどの要素を選択したいか(何番目の要素を選択したいか)を決め打ちできる場合は、この方法が楽ですね。ただし、要素の順番が不定の場合は使えないでしょう。

2つ目は、同じくmshtml.HTMLSelectElementに変換後、setAttributeメソッドを用いてvalue属性を設定する方法。HTMLのソースを見て、optionタグごとにvalueが固定されていれば利用できる感じです。

3つ目は、同じくmshtml.HTMLSelectElementに変換後、optionsプロパティを呼び出し、各要素をmshtml.HTMLOptionElementに変換して、innerTextが所望の文字列と合致するかを確認しています。文字ベースで、選択肢を選択したい場合はこれ一択ですね。本当はLINQを使いたいところなのですが、上手いことCastできなかったのでforeachで回しています…。