14

我正在尝试使用 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");

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

4

7 回答 7

17

假设您在 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");
于 2010-02-28T15:48:13.827 回答
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");
    }
}
于 2010-07-02T06:14:42.773 回答
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");
于 2010-02-28T15:48:11.410 回答
4

试试这个:

在项目中添加对 microsoft.mshtml 的引用 --> 添加引用...

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

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

于 2010-03-07T22:18:39.180 回答
3
HtmlElement hField = webBrowser1.Document.GetElementById("ID");  
hField.SetAttribute("selectedIndex", "2");  

索引基于零)而不是选择....

于 2010-05-06T19:06:24.940 回答
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;
    }
}
于 2015-07-31T22:35:45.220 回答
2

你可以使用这个:

webBrowser1.Document.GetElementById("term_id").SetAttribute("value",yourText); 
于 2014-01-21T02:53:39.347 回答