Веб-браузер управления HTMLDocument автоматизировать выбор выбора раскрывающегося списка - PullRequest
13 голосов
/ 28 февраля 2010

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

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

Ответы [ 7 ]

16 голосов
/ 28 февраля 2010

При условии, что у вас есть следующее выделение в 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");
6 голосов
/ 02 июля 2010
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");
    }
}
5 голосов
/ 28 февраля 2010

Вам нужно будет выбрать атрибут 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 голосов
/ 08 марта 2010

попробуйте это:

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

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

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

3 голосов
/ 01 августа 2015

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

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

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 голосов
/ 06 мая 2010
HtmlElement hField = webBrowser1.Document.GetElementById("ID");  
hField.SetAttribute("selectedIndex", "2");  

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

2 голосов
/ 21 января 2014

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

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