'我是想利用这个函数取出来网页的全部元素
'不是frame,就直接记下他的名称
'对frame对象,就回调继续枚举
'参数wb1可以是webbrowser,或者frame
'但是提示堆浅溢出
Private Function GetFrame(wb1 As Object) As String
'调用:
'Rtxt1.Text = GetFrame(Web1)
'Rtxt1.Text = GetFrame(Web1.Document.frames(1).Document.frames)
GetFrame = ""
Dim x As Object
For Each x In wb1.Document.All
If UCase(x.tagname) <> "IFRAME" Then
GetFrame = GetFrame & x.tagname & ":" & "" & vbCrLf
ElseIf UCase(x.tagname) = "IFRAME" Then
GetFrame = GetFrame & x.tagname & ":" & x.Name & GetFrame(x) & vbCrLf
End If
Next
End Function那我大侠帮看看?谢谢先!
'不是frame,就直接记下他的名称
'对frame对象,就回调继续枚举
'参数wb1可以是webbrowser,或者frame
'但是提示堆浅溢出
Private Function GetFrame(wb1 As Object) As String
'调用:
'Rtxt1.Text = GetFrame(Web1)
'Rtxt1.Text = GetFrame(Web1.Document.frames(1).Document.frames)
GetFrame = ""
Dim x As Object
For Each x In wb1.Document.All
If UCase(x.tagname) <> "IFRAME" Then
GetFrame = GetFrame & x.tagname & ":" & "" & vbCrLf
ElseIf UCase(x.tagname) = "IFRAME" Then
GetFrame = GetFrame & x.tagname & ":" & x.Name & GetFrame(x) & vbCrLf
End If
Next
End Function那我大侠帮看看?谢谢先!
===估计是这一句
我一运行,就提示堆浅溢出,就退出了
没有返回那个出错的地方
Option ExplicitPrivate Sub Command1_Click()
Rtxt1.Text = GetFrame(Web1)
End SubPrivate Sub Form_Load()
'使用2个比较流行的网站126,sohu测试
'登陆进去,点击“写信”按钮,右边出现收件人,主题、正文框,就点击Command1
'经过测试,126的可以,没有报错,sohu的就报错
'sohu报错是这一句:GetFrame = GetFrame & x.tagname & ":" & x.Name & GetFrame(x) & vbCrLf
Web1.Navigate2 "http://mail.126.com/"
Web1.Navigate2 "http://mail.sohu.com/"
End Sub
'我是想利用这个函数取出来网页的全部元素
'不是frame,就直接记下他的名称
'对frame对象,就回调继续枚举
'参数wb1可以是webbrowser,或者frame
'但是提示堆浅溢出
Private Function GetFrame(wb1 As Object) As String
'调用:
'Rtxt1.Text = GetFrame(Web1)
'Rtxt1.Text = GetFrame(Web1.Document.frames(1).Document.frames)
GetFrame = ""
Dim x As Object
For Each x In wb1.Document.All
If UCase(x.tagname) <> "IFRAME" Then
GetFrame = GetFrame & x.tagname & ":" & "" & vbCrLf
ElseIf UCase(x.tagname) = "IFRAME" Then
GetFrame = GetFrame & x.tagname & ":" & x.Name & GetFrame(x) & vbCrLf
End If
NextEnd Function
Option ExplicitPrivate Sub Command1_Click()
Call GetFrame(Web1)
End SubPrivate Sub Form_Load()
Web1.Navigate2 "http://mail.126.com/"
' Web1.Navigate2 "http://mail.sohu.com/"
Me.Rtxt1.Text = ""
End Sub
Private Sub GetFrame(ByVal wb1 As Object)
Dim x As Object
Static i As Integer
For Each x In wb1.Document.All
If UCase(x.tagname) <> "IFRAME" Then
Me.Rtxt1.SelStart = Len(Rtxt1.Text)
Me.Rtxt1.SelText = x.tagname & ";"
Else
Me.Rtxt1.SelStart = Len(Rtxt1.Text)
Me.Rtxt1.SelText = x.tagname & ";" & vbCrLf
i = i + 1
If i > 10 Then
Exit Sub
End If
Call GetFrame(x)
End If' Me.Rtxt1.SelStart = Len(Rtxt1.Text)
' Me.Rtxt1.SelText = x.tagname & ";"
Next
End Sub
看一下运行结果就知道了。如果不加退出会死循环。
我写这个函数的目的,本来是想枚举网页的全部元素。就是,要是没有frame,就将全部的text,option,select,checkbox,textarea枚举出来,要是有IFRAME,就将那个IFRAME里面全部的text,option,select,checkbox,textarea枚举出来,循环,一直得到全部的元素为止。但是现在我看到sohu的大量一样的元素,不知是不是那个地方重复了?继续请教,谢谢先!
要考虑的是frame下面有子frame,子frame下面有孙子frame,...怎么办?继续请教