gpt4 book ai didi

vb.net - 使用 VB.Net 访问 html 标记源 html 中的元素

转载 作者:行者123 更新时间:2023-12-03 17:38:42 26 4
gpt4 key购买 nike

我在 Vb.Net WinForms 应用程序中使用 SHDocVw.InternetExplorer API 从 Internet Explorer 获取元素。我可以轻松访问父文档和框架元素内的元素,但我无法访问“嵌入”容器内的元素。这是示例代码:

    Dim ie As SHDocVw.InternetExplorer
ie.Navigate("Some URL")
ie.Visible = True
Dim ieDoc As mshtml.IHTMLDocument2 = ie.Document

'All Elements
Dim allElements = ieDoc.all

'Frames
Dim allFrames = ieDoc.frames

'Fetch each frame and use its document to get all elements

Dim allEmbed = ieDoc.embeds

'How to fetch document inside embed to access its elements?

这是一个示例 html:

示例.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample</title>
</head>
<body>
<embed src="test.html" name="test1"/>
</body>
</html>


测试.html

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample</title>
</head>
<body bgcolor="#FFFFFF">
<button>Button1</button>
<label>Test 1</label>
</body>
</html>


如何使用“嵌入”标签访问在 Sample.html 中加载的 Test.html 中的按钮和标签?

编辑 1 :

根据我的研究,我可以使用“object”元素的 .contentDocument 属性访问“object”容器内的文档,但同样不适用于“embed”容器。

我可以使用“嵌入”容器上的 getSVGDocument() 属性获取一些 comObject,但无法将其转换为 mshtml.IHTMLDocument2

最佳答案

嗯,我一直在使用“Html Agility Pack”来解析这里的 html,它非常棒,
您可以在页面中获取所有嵌入元素,然后它们读取/解析内部内容。
http://html-agility-pack.net/

我的样本:

'<html xmlns='http://www.w3.org/1999/xhtml'>
'<head>
' <title>Sample</title>
'</head>
'<body>
' <embed src='http://stackoverflow.com/questions/41806246/access-elements-inside-html-embed-tag-source-html-using-vb-net' name='test1'/>
'</body>
'</html>
'The htmlCode string:

Dim htmlCode As String = "<html xmlns='http://www.w3.org/1999/xhtml'><head><title>Sample</title></head><body><embed src='http://stackoverflow.com/questions/41806246/access-elements-inside-html-embed-tag-source-html-using-vb-net' name='test1'/></body></html>";

Dim client As New WebClient()

Dim doc = New HtmlDocument()
doc.LoadHtml(htmlCode)

Dim nodes = doc.DocumentNode.Descendants("embed")

For Each item As var In nodes
Dim srcEmded = item.GetAttributeValue("src", "")

If Not String.IsNullOrWhiteSpace(srcEmded) Then

Dim yourEmbedHtml As String = client.DownloadString(srcEmded)
'Do what you want with yourEmbedHtml

End If
Next

关于vb.net - 使用 VB.Net 访问 html <embed> 标记源 html 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com