Получение идентификатора тега имени класса в веб-браузере

1

Итак, я получил веб-страницу с тегом ввода

<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>

Идентификатор и имя меняются, но имя класса всегда одно и то же - так, используя тег класса (имя класса), как я могу получить идентификационное имя, 5443 (ну все они один за другим в цикле for), используя визуальный базовый браузер? Мне не нужна информация тега имени.

EDIT: добавлен код

Теги:
web-scraping
dom

3 ответа

1

Селектор CSS:

Если вы используете VBA, то после того, как у вас есть HTML внутри HTMLDocument например

IE.document, то вы можете использовать querySelectorAll метод document применить селектор CSS, чтобы получить элементы, представляющие интерес.

Селектор CSS для применения: #mainID div.inside input

Это говорит о получении элементов, где внутри тега input внутренний тег внутри класса с именем класса inside внутри id mainID. "#" - это id, а "." is className. " " Представляет гнездование.


Запрос CSS:

Селектор вашего HTML возвращает следующие элементы:

Изображение 174551


VBA:

Вы можете использовать следующее для извлечения элементов, а затем проанализировать HTML с помощью Split чтобы получить 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
0

Я понял это после messin вокруг с оригинальным сообщением, которое я нашел на 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
  • 0
    Не работает, к сожалению. Я знал шутку об этом и пытался возиться с чем-то похожим, но не сработало. Я забыл добавить код, который я добавил сейчас.
-2

Это непростая задача в фоновом режиме. Но клиентская сторона его легко jquery.

Вот ссылка как ваш ответ на С#.

Как выбрать элемент по классу вместо ID в ASP.NET?

"Вы не можете сделать это на основе только имени класса. Имя класса и идентификатор полностью не связаны. Подумайте об этом: один и тот же класс может использоваться для разных объектов, но значения id всегда должны быть уникальными на странице. просьба просто не имеет смысла, ответ на нее очевиден ". обратитесь к ссылке.

http://www.codeproject.com/questions/720610/csharp-code-for-get-ID-of-the-control-using-its-cl

С# как получить имя (в строке) свойства класса?

Этот пример ниже для стороны clint через jquery. Это довольно легко.

На стороне браузера используйте jquery или javascript. В вашем случае используйте jquery.

Добавьте последний jquery на HTML-страницу и напишите код в теге скрипта как

<script>
  $( document ).ready(function() {        
        $('.test').click(function() {
               alert( this.id );
        });
    });
</script>

Ссылки: - jquery: получить идентификатор из селектора классов

вы можете выполнить поиск из условия варки

Получить идентификатор по имени класса JQuery

  • 1
    он не говорит о jquery ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню