如何通过 GetElementByClass 选择一个类并以编程方式单击它

Posted

技术标签:

【中文标题】如何通过 GetElementByClass 选择一个类并以编程方式单击它【英文标题】:How to select a class by GetElementByClass and click on it programmatically 【发布时间】:2011-03-27 01:16:39 【问题描述】:

我一直在尝试使用此代码在 html/ajax 中按类读取元素,因为我知道 GetElementByClass 不是 webBrowser.Document 中的选项。我似乎无法获得返回值然后调用该成员。有解决办法吗?

参考资料: 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.
        
    

【问题讨论】:

【参考方案1】:

我承认这不是很直观,但您需要使用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
    

【讨论】:

【参考方案2】:

这是我如何使用 webbrowser 控件查找特定于类的元素并调用 Click on a link 的示例。

简化的>

   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;
            
         

这样行吗?..

这里对我有用。

或者我误解了你的问题?

【讨论】:

这不会触发示例链接中的事件。如果您再次查看链接,我正在尝试触发 ajax 事件“测试”。 =)【参考方案3】:

为什么不为此使用 qjuery 的选择器引擎。 另外,您希望 messagebox.show 出现在哪里?

【讨论】:

太棒了,jquery 的一个分支? ;) Messagebox.Show 是为了向我展示它检索到的文本。 JQuery 我不熟悉。有这种情况的例子吗?【参考方案4】:
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

这也可以代替使用“class”使用“className”

【讨论】:

以上是关于如何通过 GetElementByClass 选择一个类并以编程方式单击它的主要内容,如果未能解决你的问题,请参考以下文章

使用 JS 定位类名迭代

如何根据 div 宽度调整图像大小? [复制]

如何使用 Angular 6 中的类名更改背景颜色?

dom文档操作-学习

dom操作

如何通过代理解决选择器选择?