在webbrowser中获取类名标记的ID

时间:2014-05-23 04:41:15

标签: html vb.net vba dom

所以我得到了一个带有输入标签的网页

<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?我不想要名称标签信息。

编辑:添加代码

3 个答案:

答案 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上的选择器返回以下元素

CSS selector


VBA:

您可以使用以下内容检索元素,然后使用Split解析HTML以获取其中的IdsquerySelectorAll返回一个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

你可以从各种条件进行搜索

Get the ID by Class name JQuery