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

C# WebBrowser控件HTMLDocument自动选择选项下拉列表,c#,browser,option,drop-down-menu,C#,Browser,Option,Drop Down Menu,我正试图在WinForm中使用WebBrowser控件自动导航并从网站中提取报告信息。您可以在文本框中输入值并调用按钮和链接的单击事件,但我还不知道如何选择选项下拉列表。。。。以自动化的方式。有人推荐如何从下拉列表中选择一个项目吗?给出以下html示例: <SELECT id="term_id" size="1" name="p_term_in"><option value="">Select Another Term<option value="201050"&g

我正试图在WinForm中使用WebBrowser控件自动导航并从网站中提取报告信息。您可以在文本框中输入值并调用按钮和链接的单击事件,但我还不知道如何选择选项下拉列表。。。。以自动化的方式。有人推荐如何从下拉列表中选择一个项目吗?给出以下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>
选择另一个术语2010年夏季2010年春季2010年秋季2009
对于其他可以从向文本框输入值和调用单击事件中学习的用户,以下是您的操作方法:

webBrowser1.Document.GetElementById("<HTML ELEMENT NAME>").SetAttribute("value", "THE NAME");
webBrowser1.Document.GetElementById(“”).SetAttribute(“值”、“名称”);
调用按钮或超链接单击:

webBrowser1.Document.GetElementById("<BUTTON>").InvokeMember("click");
webBrowser1.Document.GetElementById(“”)InvokeMember(“单击”);

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

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

鉴于:

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

假设您在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>
试试这个:

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

    Dim cboTemp As mshtml.HTMLSelectElement
    cboTemp = WebBrowser1.Document.GetElementById("myselect").DomElement
    cbotemp.selectedindex = 2
将变量cbotemp设置为select元素可以让您更好地访问控件:)

索引选择(从零开始),而不是按值选择…

var select=webBrowser.Document.GetElementById(“ddlProyectos”);
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");
    }
}
mshtml.HTMLSelectElement cbProyectos=select.doelement作为mshtml.HTMLSelectElement; var total=cbProyectos.length; 对于(变量i=0;i
您可以使用以下功能:

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

五年后,我在这篇帖子上为那些正在寻找解决这个问题的方法的人们做了回答

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

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

很抱歉,这不起作用,因为
select
元素没有
value
属性。刚刚测试过…你的建议是正确选择了选项(我可以看到它被选中)。但是,与该选项关联的脚本似乎没有运行。当我后来手动选择此选项时,脚本运行良好。你知道为什么吗?如何修复它?
webBrowser1.Document.GetElementById("term_id").SetAttribute("value",yourText); 
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;
    }
}