如何通过 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 选择一个类并以编程方式单击它的主要内容,如果未能解决你的问题,请参考以下文章