2010-02-28 2 views
13
.

. Я пытаюсь автоматизировать в WinForm с помощью элемента управления WebBrowser для навигации и вывода информации о отчетах с веб-сайта. Вы можете вводить значения в текстовые поля и вызывать события кликов для кнопок и ссылок, но я не понял, как выбрать раскрывающийся список ... автоматическим способом. Кто-нибудь порекомендовать, как выбрать элемент из раскрывающегося списка, учитывая этот HTML пример:Управление веб-браузером. HTMLDocument автоматизирует выпадающий вариант выбора.

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

кнопки или гиперссылка Invoke нажмите:

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

Так я решаемые значения ввода и вызов нажмите, но я не решил выбор выпадающего значения.

ответ

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"); 
+4

Sorry , это не работает, поскольку элемент 'select' не имеет атрибута' value'.Просто протестировали его ... – AxelEckenberger

5

Вам нужно будет выбрать атрибут selected по нужной опции.

Дано:

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

Ниже будет SELCT третий вариант:

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 набор для выбора элемента дает больший доступ к контроль :)

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

Выбор по индекса (с нуля) не значение ....

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

Ваше предложение работает, так как выбор выбирается правильно (я вижу его выбранным). Однако сценарий, связанный с этим параметром, не работает. Когда я вручную выберу этот параметр после этого, сценарий будет работать нормально. Вы знаете, почему? Как это исправить? – newman

2

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

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

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

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

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; 
    } 
} 
Смежные вопросы