所以我得到了一个带有输入标签的网页
<div id="mainID" class="outside">
<div class="inside">
<input id="5443" name="43" type="checkbox" class="classname" />
<input id="5444" name="44" type="checkbox" class="classname" />
<input id="5445" name="45" type="checkbox" class="classname" />
<input id="5446" name="46" type="checkbox" class="classname" />
<input id="5447" name="47" type="checkbox" class="classname" />
</div>
</div>
ID和名称各不相同,但类名始终相同 - 所以使用class标签(classname),如何检索ID名称5443(以及所有这些名称在for循环中逐个检索)使用visual basic browser?我不想要名称标签信息。
编辑:添加代码
答案 0 :(得分:0)
我在stackoverflow.com上找到的原始帖子后,我想出来了
Dim theElementCollection As HtmlElementCollection = Nothing
theElementCollection = WebBrowser1.Document.GetElementsByTagName("div")
For Each curElement As HtmlElement In theElementCollection
'If curElement.GetAttribute("classname").ToString = "example" It doesn't work.
' This should be the work around.
If InStr(curElement.GetAttribute("classname").ToString, "yourcalssname") Then
' Doesn't even fire.
' InvokeMember(test) after class is found.
MessageBox.Show(curElement.GetAttribute("InnerText"))
End If
Next
答案 1 :(得分:0)
CSS选择器:
如果您使用的是VBA,则一旦将HTML放入HTMLDocument
内,例如
IE.document
,那么您可以使用document
的{{3}}方法来应用querySelectorAll
以获得感兴趣的元素。
要应用的CSS选择器是:#mainID div.inside input
这表示获取元素,该元素在id为input
内且类名为inside
的div中有一个mainID
标记。 "#"
是id,"."
是className。 " "
表示嵌套。
CSS查询:
HTML上的选择器返回以下元素
VBA:
您可以使用以下内容检索元素,然后使用Split
解析HTML以获取其中的Ids
。 querySelectorAll
返回一个nodeList
,您可以循环其长度。您不能使用For Each Loop
。它将使Excel崩溃!
Option Explicit
Public Sub GetInfo()
Dim aNodeList As Object, i As Long
'Other code to get the HTMLDocument.......
Set aNodeList = HTMLDocument.querySelectorAll("#mainID div.inside input")
For i = 0 To aNodeList.Length - 1
Debug.Print GetId(aNodeList(i).innerHTML)
'Debug.Print GetId(aNodeList.item(i).innerHTML) '<== Sometimes the syntax is like this rather than the above
Next i
End Sub
Public Function GetId()
GetId = Replace$(Split(Split(s, "id=")(1), Chr$(32))(0), Chr$(34), vbNullString)
End Function
答案 2 :(得分:-2)
后端并不容易。但客户端很容易通过jquery。
以下是c#的答案链接。
How to select an element by Class instead of ID in ASP.NET?
“你不能只根据类名来做。类名和id完全不相关。只要想一想:同一个类可以用于不同的对象,但id值在页面上应该始终是唯一的。因此,请求根本没有意义;答案显而易见。“参考链接。
http://www.codeproject.com/Questions/720610/csharp-code-for-get-ID-of-the-control-using-its-cl
C# how to get the name (in string) of a class property?
以下示例通过jquery进行clint。很容易。
在浏览器端使用jquery或javascript。在你的情况下使用jquery。
在HTML页面中添加最新的jquery,并将代码编写为脚本标记
<script>
$( document ).ready(function() {
$('.test').click(function() {
alert( this.id );
});
});
</script>
参考链接: - jquery: get id from class selector
你可以从各种条件进行搜索