Управление веб-браузером. HTMLDocument автоматизирует выпадающий вариант выбора.

Я пытаюсь автоматизировать в 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>

Для других, которые могут научиться вводить значения в текстовые поля и вызывать здесь события кликов, как вы это делаете:

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

Кнопка вызова или гиперссылки:

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

Итак, я решил ввести значения и вызвать клик, но я не решил выбрать раскрывающееся значение.

Ответы

Ответ 1

Предполагая, что в 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");

Ответ 2

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

Ответ 3

Вам нужно будет выбрать атрибут selected для нужного параметра.

Дано:

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

Следующее будет означать третий вариант:

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

Ответ 4

попробуйте следующее:

добавить ссылку на microsoft.mshtml в проекте → добавить ссылку...

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

имеющий переменную cbotemp, установленную на элемент select, дает вам больший доступ к элементу управления:)

Ответ 5

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

выберите индекс (на основе нуля), а не значение....

Ответ 6

Я отвечаю на эту должность через пять лет, для людей, которые ищут решение этой проблемы.

Если вам просто нужно отправить/отправить значение для выпадающего списка, эта строка будет достаточной:

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

Ответ 7

Вы можете использовать это:

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