2010-08-08 6 views
5

Tôi đã cố gắng sử dụng mã này để đọc phần tử theo lớp trong html/ajax biết GetElementByClass không phải là một tùy chọn trong webBrowser.Document. Tôi dường như không thể nhận được một giá trị trả về sau đó gọi thành viên. Có một cách giải quyết cho điều này?Làm thế nào để chọn một lớp học bằng GetElementByClass và bấm vào nó theo chương trình

Tài liệu tham khảo: Getting HTMLElements by Class Name

Ví dụ:

<span class="example">(<a href="http://www.test.com/folder/remote/api?=test" onclick=" return do_ajax('popup_fodder', 'remote/api?=test', 1, 1, 0, 0); return false; " class="example">test</a>)</span> 

Ví dụ mã:

HtmlElementCollection theElementCollection = default(HtmlElementCollection); 
    theElementCollection = webBrowser1.Document.GetElementsByTagName("span"); 
    foreach (HtmlElement curElement in theElementCollection) 
    { 
     //If curElement.GetAttribute("class").ToString = "example" It doesn't work. 
     // This should be the work around. 
     if (curElement.OuterHtml.Contains("example")) 
     { 
      MessageBox.Show(curElement.GetAttribute("InnerText")); // Doesn't even fire. 
      // InvokeMember(test) after class is found. 
     } 
    } 

Trả lời

0

Tại sao bạn không sử dụng công cụ chọn qjuery của cho việc này. Và cũng có thể, bạn đang mong chờ hộp thông báo.show xuất hiện ở đâu?

+3

Awesome, một ngã ba của jquery? ;) –

+0

Messagebox.Show hiển thị cho tôi văn bản mà nó đã truy xuất. JQuery Tôi không quen thuộc với. Có một ví dụ trong trường hợp này? – Nightforce2

4

đây là ví dụ về cách tôi sử dụng điều khiển trình duyệt web để tìm các phần tử cụ thể của lớp và gọi Nhấp vào liên kết bên trong.

đơn giản hóa>

foreach (HtmlElement item in webBrowser1.Document.GetElementsByTagName("li")) 
     { 
      // use contains() if the class attribute is 
      // class="page_item page-item-218 current_page_item" 
      //this to be more on spot! >> if (item.OuterHtml.Contains("class=\"page_item")) 
      // or 
      if (item.OuterHtml.Contains("page_item")) 
      { 
       foreach (HtmlElement childItem in item.Children) 
       { 
        if (childItem.TagName == "A") 
        { 
         //Click the link/Current element 
         childItem.InvokeMember("Click"); 
         break; 
        } 
       } 
       break; 
      } 
     } 

làm theo cách này làm việc? ..

nó làm việc cho tôi ngay tại đây.

hoặc có thể tôi hiểu sai câu hỏi của bạn?

+0

Điều này không kích hoạt sự kiện trong liên kết Ví dụ. Tôi đang cố gắng kích hoạt sự kiện ajax "Kiểm tra" nếu bạn xem lại liên kết. =) – Nightforce2

12

tôi thừa nhận nó không phải là rất trực quan, nhưng bạn cần phải sử dụng GetAttribute("className") thay vì GetAttribute("class")

HtmlElementCollection theElementCollection = default(HtmlElementCollection); 
theElementCollection = webBrowser1.Document.GetElementsByTagName("span"); 
foreach (HtmlElement curElement in theElementCollection) 
{ 
    if (curElement.GetAttribute("className").ToString() == "example") 
    { 
     MessageBox.Show(curElement.GetAttribute("InnerText")); // Do something you want 
    } 
} 
0
Dim HtmlElementcolltwo As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("button") 
     For Each eleme As HtmlElement In HtmlElementcolltwo 
      ' Check the attributtes you want 
      If eleme.GetAttribute("className") = "derrt_submit feed-zed-bff" Then 
       'Check even the text if you want 
       ' If elem.InnerText = "Sign In" Then 
       'Invoke your event 
       eleme.InvokeMember("click") 
       'End If 
      End If 
     Next 

này Cũng làm việc thay vì sử dụng "class" sử dụng "className"