2010-02-28 27 views
13

Tôi đang cố gắng tự động hóa trong một WinForm bằng cách sử dụng điều khiển WebBrowser để điều hướng và kéo thông tin báo cáo từ một trang web. Bạn có thể nhập các giá trị trong hộp văn bản và gọi các sự kiện nhấp chuột cho các nút và liên kết, nhưng tôi đã không tìm ra cách chọn một tùy chọn thả xuống .... theo cách tự động. Bất kỳ ai khuyên làm thế nào để chọn một mục từ menu thả xuống, đưa ra ví dụ html này:Điều khiển trình duyệt web HTMLDocument tự động chọn tùy chọn thả xuống

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

Đối với những người khác có thể học hỏi từ nhập các giá trị cho các hộp thoại gọi sự kiện nhấp chuột dưới đây là cách bạn làm điều đó:

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

gọi nút hoặc liên kết nhấp chuột:

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

giá trị Vì vậy, tôi đã giải quyết nhập và gọi nhấp chuột, nhưng tôi đã không giải quyết việc lựa chọn một giá trị thả xuống.

Trả lời

16

Giả sử bạn có sau đây chọn trong 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> 

này sẽ cho phép bạn chọn trước giá trị thứ ba:

webBrowser1.Document.GetElementById("term_id").SetAttribute("value", "201010"); 
+4

Xin lỗi , điều này không hoạt động vì phần tử 'select' không có thuộc tính' value'.Chỉ cần thử nghiệm nó ... – AxelEckenberger

5

Bạn sẽ phải chọn thuộc tính selected tùy chọn bạn muốn.

Given:

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

Sau đây sẽ selct tùy chọn thứ ba:

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

thử điều này:

thêm tài liệu tham khảo để microsoft.mshtml trong dự án -> thêm tài liệu tham khảo ...

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

có cbotemp biến thiết lập để một yếu tố lựa chọn cung cấp cho bạn truy cập nhiều hơn đến kiểm soát :)

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

chọn bởi index (zero dựa) không phải là giá trị ....

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

Đề xuất của bạn hoạt động ở chỗ tùy chọn được chọn đúng (tôi có thể thấy nó được chọn). Tuy nhiên, tập lệnh được liên kết với tùy chọn dường như không chạy. Khi tôi chọn tùy chọn này theo cách thủ công sau đó, tập lệnh sẽ chạy tốt. Bạn có ý kiến ​​gì không? Làm thế nào để sửa chữa nó? – newman

2

Bạn có thể sử dụng này:

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

tôi trả lời về bài đăng này sau năm năm đối với những người đang tìm kiếm một giải pháp của vấn đề này.

Nếu bạn chỉ cần nộp/gửi một giá trị cho thả xuống thì dòng này là đủ:

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

Nhưng nếu bạn thực sự cần phải chọn một OPTION cơ bản, sau đó:

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; 
    } 
} 
Các vấn đề liên quan