积极答复者
如何获取 WebBrowser.Document 中某命名空间中的元素?

问题
答案
-
Function FindHtmlElement(ByVal FindText As String, ByVal doc As HtmlDocument, ByVal cTagName As String, ByVal cGetAttribute As String, Optional ByVal StrictMatching As Boolean = False) As HtmlElement 'cTagName:检索具有指定 html 标记的元素 'cGetAttribute :比较的属性类型,取值为:Id、InnerText、Name、title、classname、value、等 'doc:Webbrowser1.Document 'StrictMatching:True严格匹配FindText Dim i, k As Integer FindHtmlElement = Nothing For i = 0 To doc.GetElementsByTagName(cTagName).Count - 1 ' If InStr(doc.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute), FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute)) > 0) Then FindHtmlElement = doc.GetElementsByTagName(cTagName).Item(i) Exit Function End If Next For k = 0 To doc.Window.Frames.Count - 1 For i = 0 To doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Count - 1 If InStr(doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute), FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute)) > 0) Then FindHtmlElement = doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i) Exit Function End If Next '递归调用 If FindHtmlElement Is Nothing Then FindHtmlElement = FindHtmlElement(FindText, doc.Window.Frames.Item(k).Document, cTagName, cGetAttribute, StrictMatching) End If Next End Function
因为Id、及InnerText均可通过GetAttribute获取,所以代码简化如上:- 已标记为答案 ThankfulHeartModerator 2013年5月28日 8:12
全部回复
-
你看到他的上层是iframe,应该找对应ifame的document
-
-
你确信Me.WebBrowser1.Document.GetElementById("frm_main").Document.All取得到值吗
先看Me.WebBrowser1.Document.GetElementById("frm_main").Document.Body.Innerhtml
-
谢谢,遇到同样的问题,在这里找到了答案。
以后遇到相同的问题需要关注,你可以点击某个帖子的左上角“订阅”,请注意你必须有订阅的邮箱,这样你不必回帖就可以看到讨论全部的情况啦!(订阅邮件可以在登陆MSDN之后右边“我的设置”中设置)。If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer
Help by clicking:
Click here to donate your rice to the poor
Click to Donate
Click to feed Dogs & Cats
Found any spamming-senders? Please report at: Spam Report -
谢谢ProgrammingVolunteer,这个问题主要不知道该如何提出问题,所以很难找到相关的帖子进行关注,我在CSDN上搜索过,有说这是跨域访问,说比较难,我是最近才进来这里,我见这里的回复还比较快,所以将我的问题发帖提问的同时,搜索见到了这个帖子,跟我要提的问题一模一样,本想像在别的论坛一样收藏这个帖子,可没发现论坛有这功能,便回复了一个作为标记,同时将我提问帖删除了以免浪费资源及各位热心大大的精力。
我知道订阅功能,只是我看到这帖子时,答案也已经有了,所以便没有使用订阅。
我参照你的代码,写了个递归函数,比较方便找到要找的网页元素,明天将代码贴出来给大家一个参考。
这个问题我已经找了很久,在这里才找到答案,再次谢谢你,ProgrammingVolunteer。
-
其实当你点击“订阅”,就可以在“我的警报”中查看到(如果你登陆之后,在右边菜单中可以点击“我的警报”)。
如果方便的话,你还可以回复(譬如粘贴你的解决方案),谢谢哦!
If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer
Help by clicking:
Click here to donate your rice to the poor
Click to Donate
Click to feed Dogs & Cats
Found any spamming-senders? Please report at: Spam Report -
Function FindHtmlElement(ByVal FindText As String, ByVal doc As HtmlDocument, ByVal cTagName As String, ByVal cGetAttribute As String, Optional ByVal StrictMatching As Boolean = False) As HtmlElement 'cTagName:检索具有指定 html 标记的元素 'cGetAttribute :比较的属性类型,取值为:InnerText、Name、title、classname、value、等 'doc:Webbrowser1.Document 'StrictMatching:True严格匹配FindText Dim i, k As Integer FindHtmlElement = Nothing loopcount = loopcount + 1 For i = 0 To doc.GetElementsByTagName(cTagName).Count - 1 ' If cGetAttribute = "InnerText" Then If InStr(doc.GetElementsByTagName(cTagName).Item(i).InnerText, FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.GetElementsByTagName(cTagName).Item(i).InnerText) > 0) Then FindHtmlElement = doc.GetElementsByTagName(cTagName).Item(i) Exit Function End If Else If InStr(doc.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute), FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute)) > 0) Then FindHtmlElement = doc.GetElementsByTagName(cTagName).Item(i) Exit Function End If End If Next For k = 0 To doc.Window.Frames.Count - 1 For i = 0 To doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Count - 1 If cGetAttribute = "InnerText" Then If InStr(doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).InnerText, FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).InnerText) > 0) Then FindHtmlElement = doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i) Exit Function End If Else If InStr(doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute), FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute)) > 0) Then FindHtmlElement = doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i) Exit Function End If End If Next '递归调用 If FindHtmlElement Is Nothing Then FindHtmlElement = FindHtmlElement(FindText, doc.Window.Frames.Item(k).Document, cTagName, cGetAttribute, StrictMatching) End If Next End Function
我写的查找网页元素的代码,以webbrowser1.Document作顶层。
少了按ID查找。
- 已标记为答案 ThankfulHeartModerator 2013年5月27日 9:32
- 取消答案标记 ThankfulHeartModerator 2013年5月28日 8:12
-
Function FindHtmlElement(ByVal FindText As String, ByVal doc As HtmlDocument, ByVal cTagName As String, ByVal cGetAttribute As String, Optional ByVal StrictMatching As Boolean = False) As HtmlElement 'cTagName:检索具有指定 html 标记的元素 'cGetAttribute :比较的属性类型,取值为:Id、InnerText、Name、title、classname、value、等 'doc:Webbrowser1.Document 'StrictMatching:True严格匹配FindText Dim i, k As Integer FindHtmlElement = Nothing For i = 0 To doc.GetElementsByTagName(cTagName).Count - 1 ' If InStr(doc.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute), FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute)) > 0) Then FindHtmlElement = doc.GetElementsByTagName(cTagName).Item(i) Exit Function End If Next For k = 0 To doc.Window.Frames.Count - 1 For i = 0 To doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Count - 1 If InStr(doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute), FindText) > 0 And (Not StrictMatching Or InStr(FindText, doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i).GetAttribute(cGetAttribute)) > 0) Then FindHtmlElement = doc.Window.Frames.Item(k).Document.GetElementsByTagName(cTagName).Item(i) Exit Function End If Next '递归调用 If FindHtmlElement Is Nothing Then FindHtmlElement = FindHtmlElement(FindText, doc.Window.Frames.Item(k).Document, cTagName, cGetAttribute, StrictMatching) End If Next End Function
因为Id、及InnerText均可通过GetAttribute获取,所以代码简化如上:- 已标记为答案 ThankfulHeartModerator 2013年5月28日 8:12