Как получить ВСЕ атрибуты HTMLElement из компонента WebBrowser - PullRequest
5 голосов
/ 11 февраля 2012

Я просматриваю DOM, используя:

webBrowser.Document.Body.Parent.Children

Я хочу получить все атрибуты определенного HTMLElement. Однако у HTMLElement просто есть метод getAttribute. Я ищу что-то более похожее на htmlelement.attributes[n]. Потому что я не знаю атрибутов заранее.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2012

Если wbMain является вашим элементом управления WebBrowser1, выполните следующие действия.

Во-первых, вам нужно получить ссылку на ваш элемент, скажем, вы хотите получить доступ к первой ссылке <A> вашей страницы, вы можете просмотреть все, если хотите.

Это в VB, но то же самое в C #, только другой синтаксис.

Dim i As Integer
Dim aElement As HTMLAnchorElement = wbMain.Document.All.getElementByTagName("A")(0)

For i = 0 To aElement.attributes.length - 1
  MsgBox aElement.attributes.item(i).name & "=" & aElement.attributes.item(i).value
Next i

Это зациклит все атрибуты и отобразит его в MSGBOX в формате name=value.

Если вы хотите получить его по имени (имени атрибута), просто позвоните, используя aElement.getAttribute("target"), чтобы получить целевое значение атрибута из ссылки.

Если вы хотите подтвердить, что получили правильный объект / элемент, просто введите aElement.outerHTML, чтобы получить полный HTML-код только для этого элемента.

Поскольку я использую версию до .NET, смело меняйте объявление с HTMLAnchorElement на IHTMLAnchorElement, если это доставляет вам проблемы, конечно, вы можете просто использовать IHTMLElement, если вы хотите просмотреть все элементы на странице, затем все, что вам нужно сделать, это wbMain.Document.All (0) для первого элемента на странице или цикл до .All.length - 1, чтобы пройти все. Помните, что если вы используете вложенные циклы For, не используйте i дважды, используйте j для одного из них:).

Дайте мне знать, если это ответит на ваш вопрос или я смогу помочь вам с вашей проблемой.

2 голосов
/ 11 февраля 2012

вы можете использовать HtmlAgilityPack для анализа html документа в случае, если вы можете использовать

var doc = new HtmlAgilityPack.HtmlDocument();
   doc.Load(FileName);
   var node = doc.DocumentNode.SelectNodes("//NameofHtmlTag")[0];
   foreach (HtmlAgilityPack.HtmlAttribute attri in node.Attributes)
    {
       //iterate through attributes
    }    
0 голосов
/ 13 октября 2018

пока известно только три не loop метода.к сожалению, ни один из них не может получить ВСЕ атрибуты ВОЗМОЖНО для любого данного тега.в качестве альтернативы см. таблицу атрибутов тегов в https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes

// if someTagID (t) is a jsObj -- note, needs JSON.stringify to print.
// tip: (x,null," ") args adds newlines per key-value pair for print.
var x = Object.getOwnPropertyDescriptors(t)
JSON.stringify(x)

// else if (t) is an element via createElement, plain html etc -- see:
// NodeMap, name and value -- note, outputs to log only.
var x = t.attributes 
x.someAttr 
x.someAttr.value
// or Array -- note, no values without getAttribute()
var x = t.getAttributeNames()
t.getAttribute(x[n])

, выводим в: a var, а затем на страницу (печать) или console (журнал).Все обычные JS и работают в ES6 Chrome и Firefox.Неизвестный для других.

...