WebBrowser控件HTMLDocument自动选择选项下拉列表

时间:2010-02-28 15:40:16

标签: c# browser option drop-down-menu

我正在尝试使用WebBrowser控件在WinForm中自动化,以便从网站导航和提取报告信息。您可以在文本框中输入值并调用按钮和链接的单击事件,但我还没有想出如何以自动方式选择选项下拉列表....根据这个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");

所以我已经解决了输入值和调用点击的问题,但我还没有解决选择下拉值的问题。

7 个答案:

答案 0 :(得分:16)

假设您在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("term_id").SetAttribute("value", "201010");

答案 1 :(得分:6)

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");
    }
}

答案 2 :(得分:5)

您必须在所需选项上选择selected属性。

假设:

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

以下将选择第三个选项:

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

答案 3 :(得分:4)

试试这个:

在项目中添加对microsoft.mshtml的引用 - &gt;添加参考...

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

将变量cbotemp设置为select元素可以更好地访问控件:)

答案 4 :(得分:3)

HtmlElement hField = webBrowser1.Document.GetElementById("ID");  
hField.SetAttribute("selectedIndex", "2");  

选择索引零基础)而非 ....

答案 5 :(得分:3)

我在五年后回答这篇文章,为那些正在寻找解决这个问题的人们做好准备。

如果您只需要提交/发布下拉列表的值,则此行就足够了:

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

但是如果你真的需要选择一个基础OPTION,那么:

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;
    }
}

答案 6 :(得分:2)

您可以使用:

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