2010-08-08 32 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 

这也适用,而不是使用“类”使用“类名”

相关问题