■セレクトボックス(メニュー)の選択肢を選択する
ドロップダウンリストととも呼ばれるタイプのアレ、の選択肢を選択します。ざっと試してみた感じでは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"); | |
} | |
} | |
} | |
} |
補足説明
1つ目は、要素をmshtml.HTMLSelectElementに変換後、selectedIndexプロパティを使う方法。目視でどの要素を選択したいか(何番目の要素を選択したいか)を決め打ちできる場合は、この方法が楽ですね。ただし、要素の順番が不定の場合は使えないでしょう。2つ目は、同じくmshtml.HTMLSelectElementに変換後、setAttributeメソッドを用いてvalue属性を設定する方法。HTMLのソースを見て、optionタグごとにvalueが固定されていれば利用できる感じです。
3つ目は、同じくmshtml.HTMLSelectElementに変換後、optionsプロパティを呼び出し、各要素をmshtml.HTMLOptionElementに変換して、innerTextが所望の文字列と合致するかを確認しています。文字ベースで、選択肢を選択したい場合はこれ一択ですね。本当はLINQを使いたいところなのですが、上手いことCastできなかったのでforeachで回しています…。
この投稿へのリンク
リンクを作成