web-dev-qa-db-ja.com

WebBrowserコントロールHTMLDocumentは、オプションのドロップダウンの選択を自動化します

WebBrowserコントロールを使用してWinFormで自動化し、Webサイトからレポート情報をナビゲートおよびプルしようとしています。テキストボックスに値を入力し、ボタンとリンクのクリックイベントを呼び出すことができますが、オプションのドロップダウンを自動化して選択する方法がわかりません。このhtmlの例を考えると、ドロップダウンからアイテムを選択する方法を誰もが推奨しています。

<SELECT id="term_id" size="1" name="p_term_in"><option value="">Select Another Term<option value="201050">Summer 2010<option value="201010">Spring 2010<option value="200980">Fall 2009</SELECT>

テキストボックスに値を入力し、クリックイベントを呼び出すことから学ぶことができる他の人のために、これがあなたがそれをする方法です:

webBrowser1.Document.GetElementById("<HTML ELEMENT NAME>").SetAttribute("value", "THE NAME");

呼び出しボタンまたはハイパーリンククリック:

webBrowser1.Document.GetElementById("<BUTTON>").InvokeMember("click");

そのため、値の入力とクリックの呼び出しは解決しましたが、ドロップダウン値の選択は解決していません。

13
CWinKY

HTMLに次の選択があると仮定します。

<select id="term_id" size="1" name="p_term_in">
    <option value="">Select Another Term
    <option value="201050">Summer 2010
    <option value="201010">Spring 2010
    <option value="200980">Fall 2009
</select>

これにより、3番目の値を事前に選択できるようになります。

webBrowser1.Document.GetElementById("term_id").SetAttribute("value", "201010");
16
Darin Dimitrov
var select = webBrowser.Document.GetElementById("ddlProyectos");

mshtml.HTMLSelectElement cbProyectos = select.DomElement as mshtml.HTMLSelectElement;

var total = cbProyectos.length;
for (var i= 0; i < total; i++)
{
    cbProyectos.selectedIndex = i;
    if (cbProyectos.value.Contains("13963"))
    {
        break;
    }

}
//cbProyectos.selectedIndex = 4;
select.InvokeMember("onchange");

select.Children[4].SetAttribute("selected", "selected");

var theElementCollection = webBrowser.Document.GetElementsByTagName("select");
foreach (HtmlElement el in theElementCollection)
{
    if (el.GetAttribute("value").Equals("13963"))
    {
        el.SetAttribute("selected", "selected");
        //el.InvokeMember("click");
    }
}
6
Kiquenet

必要なオプションでselected属性を選択する必要があります。

与えられた:

<select id="mySelect">
  <option>1</option>
  <option>2</option>
  <option>3</option>
</select>

以下は、3番目のオプションを選択します。

webBrowser1.Document
           .GetElementById("")
           .Children.GetElementsByName("option")[2]
           .SetAttribute("selected", "selected");
5
AxelEckenberger

これを試して:

プロジェクトにMicrosoft.mshtmlへの参照を追加->参照を追加...

    Dim cboTemp As mshtml.HTMLSelectElement
    cboTemp = WebBrowser1.Document.GetElementById("myselect").DomElement
    cbotemp.selectedindex = 2

変数cbotempをselect要素に設定すると、コントロールへのアクセスが向上します:)

4
mattb

この問題の解決策を探している人々のために、私は5年後にこの投稿に答えています。

ドロップダウンの値を送信/投稿する必要がある場合は、次の行で十分です。

webBrowser1.Document.GetElementById("term_id").SetAttribute("value", "200980");

しかし、本当に基礎となるオプションを選択する必要がある場合は、次のようにします。

HtmlElement selectDom = webBrowser1.Document.GetElementById("term_id");
foreach (HtmlElement option in selectDom.GetElementsByTagName("option"))
{
    if (option.GetAttribute("value") == "200980")
    {
        var dom = option.DomElement as dynamic;
        dom.selected = true;
        // selectDom.InvokeMember("onChange"); // if you need this too
        break;
    }
}
3
HtmlElement hField = webBrowser1.Document.GetElementById("ID");  
hField.SetAttribute("selectedIndex", "2");  

インデックスゼロベース)ではなく ...で選択します。

3
Tom

あなたはこれを使うことができます:

webBrowser1.Document.GetElementById("term_id").SetAttribute("value",yourText); 
2
DennisUKSW