如何从 WebBrowser 组件获取 HTMLElement 的所有属性

发布于 2025-01-04 19:59:36 字数 261 浏览 0 评论 0原文

我正在使用以下方式遍历 DOM:

webBrowser.Document.Body.Parent.Children

我想获取特定 HTMLElement 的所有属性。但是,HTMLElement 只有一个 getAttribute 方法。我正在寻找更像 htmlelement.attributes[n] 的东西。因为我事先不知道属性。

I am traversing the DOM using:

webBrowser.Document.Body.Parent.Children

I want to get all attributes of a specific HTMLElement. However, the HTMLElement just have a getAttribute method. I am looking for something more like htmlelement.attributes[n]. Because I dont know the attributes beforehand.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

茶底世界 2025-01-11 19:59:36

如果 wbMain 是您的 WebBrowser1 控件,请执行以下操作。

首先,您需要获取对元素的引用,假设您想要访问页面的第一个 链接,如果需要,您可以循环遍历所有链接。

这是在 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

这将循环遍历所有属性并将其以 name=value 格式显示在 MSGBOX 中。

如果您想按名称(属性名称)检索它,只需使用 aElement.getAttribute("target") 调用即可从 a Link 中检索目标属性值。

如果您想确认您获得了正确的对象/元素,只需执行 aElement.outerHTML 即可仅获取该元素的完整 HTML 代码。

由于我使用的是 .NET 之前的版本,如果给您带来麻烦,请随意将声明从 HTMLAnchorElement 更改为 IHTMLAnchorElement,当然,如果您想遍历页面上的所有元素,则可以使用 IHTMLElement,然后您就可以了对于页面上的第一个元素,需要做的是 wbMain.Document.All(0) ,或者循环直到 .All.length - 1 遍历所有元素。请记住,如果您使用嵌套的 For 循环,请不要使用 i 两次,而使用 j 作为其中之一:)。

如果这能回答您的问题,或者我是否可以采取更多措施来帮助您解决问题,请告诉我。

If wbMain is your WebBrowser1 control, do the following.

First, you need to get a ref to your element, lets say you want to access the first <A> link, of your page, you can loop through all if you want.

This is in VB, but its the same sort of thing in C#, just different syntax.

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

This will loop through all attributes and display it in a MSGBOX in a name=value format.

If you want to retreive it by name (attributes name) just call using aElement.getAttribute("target") to retreive the target attributes value from the a Link.

If you want to confirm you got the right object/element, just do a aElement.outerHTML to get the full HTML code for that element only.

Since I am using a pre.NET version, feel free to change the declaration from HTMLAnchorElement to IHTMLAnchorElement if it gives you trouble, of course, you can just use IHTMLElement if you want to go through all elements on a page, then all you'll need to do is wbMain.Document.All(0) for first element on a page, or loop until .All.length - 1 to go through all. Remember if you are using nested For loops, don't use i twice, use j for one of them :).

Let me know if this answers your question or if there is more I can do to help you with your issue.

素手挽清风 2025-01-11 19:59:36

您可以使用 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
    }    

you can use HtmlAgilityPack to parse html doc in u r case u can use

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
    }    
甜味拾荒者 2025-01-11 19:59:36

到目前为止只知道三种非循环方法。不幸的是,似乎没有人能够在任何给定标签上获得所有可能的属性。或者,请参阅 https://developer.mozilla 处的 attr-tag 表。 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])

输出到:var,然后页面(打印)或控制台(日志)。
所有这些都是纯 js,并且可以在 es6 chrome 和 firefox 中工作。对其他人来说是未知的。

only know three non-loop methods so far. unfortunately, none seem to get ALL attr POSSIBLE on any given tag. alternatively, see attr-tag table at 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])

output to: a var and then page (print) or to console (log).
All are plain js and work in es6 chrome and firefox. Unknown for others.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文