Управление веб-браузером. 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);