2010-02-28 99 views
13

我試圖在使用WebBrowser控件導航和從網站拉取報表信息的WinForm中自動化。您可以在文本框中輸入值並調用按鈕和鏈接的點擊事件,但我還沒有弄清楚如何自動選擇一個選項下拉菜單....有人建議如何從下拉列表中選擇一個項目,因爲這個網站例如:WebBrowser控件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

對不起,這不起作用,因爲'select'元素沒有'value'屬性。剛剛測試過它... – AxelEckenberger 2010-02-28 15:58:05

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 2012-12-01 04:41:25

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