2010-08-08 94 views
5

我一直試圖使用此代碼通過html/ajax中的類讀取元素,因爲知道GetElementByClass不是webBrowser.Document中的選項。我似乎無法獲得返回值,然後調用該成員。有沒有解決這個問題的方法?如何通過GetElementByClass選擇一個類,然後通過編程點擊它

參考文獻: Getting HTMLElements by Class Name

例子:

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

示例代碼:

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

回答

0

你爲什麼不使用qjuery的選擇器引擎這一點。 此外,您還希望在哪裏顯示messagebox.show?

+3

真棒,叉子jQuery的? ;) – 2010-08-09 03:33:35

+0

Messagebox.Show將顯示它檢索到的文本。 JQuery我不熟悉。在這種情況下有一個例子嗎? – Nightforce2 2010-08-10 20:04:57

4

這是我如何使用webbrowser控件查找類特定元素並調用的示例單擊其中的鏈接。

簡化>

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

做這樣的工作?..

它爲我的作品就在這裏。

或者我誤解了你的問題?

+0

這不會觸發示例鏈接中的事件。如果您再次查看鏈接,我正試圖解決ajax事件「測試」。 =) – Nightforce2 2010-08-10 21:32:40

12

我承認這是不是很直觀,但你需要使用GetAttribute("className")代替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 

這也適用,而不是使用「類」使用「類名」

相關問題