枚举IE页面框架以及获得跨域框架的控制权/访问框架页
来源:互联网 发布:读圣经软件下载 编辑:程序博客网 时间:2024/05/17 22:14
举个例子,比如下面的网址http://www.symental.com/other/w.htm,我想给左边的百度的文本框赋值,可是怎么也赋不了,提示拒绝访问,该如何操作?
上面网页的页面代码为:
- HTML code
- <FRAMESET border=0 frameSpacing=0 COLS="50%,*" frameBorder=0><FRAME name=topFrame src="http://www.baidu.com"><FRAME name=topFrame src="http://www.google.com"></FRAMESET>
上面的用WebBrowser1.Document.frames(0)就表示左边百度的框架页,百度的那个搜索框有个属性 name="wd",这样我们用下面的vb代码操作给它赋值:
- VB code
- Private Sub Command1_Click()' MsgBox WebBrowser1.Document.frames.length'这行会显示2,表示有两个frame框架' MsgBox WebBrowser1.Document.frames(0).Document.body.innerhtml'这行代码提示拒绝访问 WebBrowser1.Document.frames(0).Document.getElementsByName("wd")(0).Value = "测试"'赋值失败,提示拒绝访问End Sub
你参考下这个
- VB code
- ' 为运行本程序,应在“菜单->工程->部件”中添加“Microsoft Internet Controls”' 并在“菜单->工程->引用”中添加“Microsoft HTML Object Library”Sub EnumFrames(ByVal wb As WebBrowser)Dim pContainer As olelib.IOleContainerDim pEnumerator As olelib.IEnumUnknownDim pUnk As olelib.IUnknown'Dim pBrowser As SHDocVw.IWebBrowser2Dim pBrowser As SHDocVwCtl.WebBrowser_V1 Set pContainer = wb.Object.Document ' Get an enumerator for the frames If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then Set pContainer = Nothing ' Enumerate and refresh all the frames Do While pEnumerator.Next(1, pUnk) = 0 On Error Resume Next ' Clear errors Err.Clear ' Get the IWebBrowser2 interface Set pBrowser = pUnk If Err.Number = 0 ThenFor i = 0 To pBrowser.Document.All.length - 1 If UCase(pBrowser.Document.All(i).tagName) = "A" Then 'List1.AddItem pBrowser.All(i).href Debug.Print Now & pBrowser.Document.All(i).href Debug.Print Now & pBrowser.Document.All(i).innterHTML pBrowser.Document.All(i).Click 'Exit For End IfNext Debug.Print "Frame: " & pBrowser.LocationURL End If Loop Set pEnumerator = Nothing End If End Sub
谢谢楼上,搞定了,贴上完整代码:
- VB code
- ' 为运行本程序,应在“菜单->工程->部件”中添加“Microsoft Internet Controls”' 并在“菜单->工程->引用”中添加“Microsoft HTML Object Library”,添加“Edanmo's OLE interfaces & functions v1.4”Private Sub Command1_Click() Dim pContainer As olelib.IOleContainer Dim pEnumerator As olelib.IEnumUnknown Dim pUnk As olelib.IUnknown Dim pBrowser As SHDocVwCtl.WebBrowser_V1 Set pContainer = WebBrowser1.Object.Document If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then Set pContainer = Nothing Do While pEnumerator.Next(1, pUnk) = 0 On Error Resume Next Err.Clear Set pBrowser = pUnk If Err.Number = 0 Then If pBrowser.LocationURL = "http://www.baidu.com/" Then pBrowser.Document.getElementsByName("wd")(0).Value = "测试" Exit Sub End If End If Loop Set pEnumerator = Nothing End IfEnd Sub
- 公示下是为了让大家都学习下,另外贴个我找到的资料,跟楼主的很像,是从这个改过来的吧?呵呵
http://hi.baidu.com/cnoldjohn/blog/item/ff220ae7c1ac9d2bb8382036.html
vb枚举IE页面框架以及获得跨域框架的控制权
为什么写这个?
1.操作跨域框架。这个资料很难得,我在网上苦苦找了一个星期。以前研究BHO的时候,也是找了好久的。留此存照。在vb吧提问如何取得跨域框架的控制权,仅有一个人对此关注,并且说很简单,直接分析源代码,或者用DOM等...恩,现在的vb吧确实很少有深刻的内容了。
2.了解IE编程知识。本以为通过一次BHO编程,已经了解一些IE编程技巧了,结果这次写这个程序,又辛苦找了十来天的资料。现在看来,自己果然无知。懂得越多,越觉得自己无知。
下面是代码
'需要引用Microsoft Html Object Library,Edanmo's Ole interfaces 1.81 ,Microsoft Internet Controls
'其中,Edanmo's Ole interfaces 1.81是Edanmo写的OLELIB.TLB,请自己在网上搜索下载
'声明一个全局变量数组IframeIE,用来保存网页框架的操作对象;至少我是这么操作的,当然有更好的办法请指教cnoldjohn嬷嬷茶
Private IframeIE() As SHDocVw.WebBrowser
'下面代码的核心是修改自MVP Edanmo的大作
'枚举框架,参数WB是一个webbrowser控件的名称,其中承载着我们要分析的页面
Sub EnumFrames(ByVal WB As WebBrowser)
Dim j As Integer
Dim pContainer As olelib.IOleContainer
Dim pEnumerator As olelib.IEnumUnknown
Dim pUnk As olelib.IUnknown
'获得页面的Document接口,然后我们就可以对其为所欲为了
Set pContainer = WB.Object.Document
'很奇怪,有时候上面这段对象赋值出错,用下面这句就没有问题了
'Set pContainer = WB.Document
If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then
Set pContainer = Nothing
Do While pEnumerator.Next(1, pUnk) = 0
On Error Resume Next
If Err.Number = 0 Then
'将框架页面依次赋值到IframeIE数组中
ReDim Preserve IframeIE(0 To j)
Set IframeIE(j) = pUnk
j = j + 1
End If
Loop
Set pEnumerator = Nothing
End If
End Sub
以上这段代码的神奇之处在于可以跨域操作框架。
实际用处主要就是刷广告,2008年6月份据此写出的自动点击工具,通杀所有广告联盟代码
- 枚举IE页面框架以及获得跨域框架的控制权/访问框架页
- frameset 框架使用 以及跨页面请求
- JavaScript 框架页面互相访问
- 集合框架Vector中的枚举以及LinkedList的学习总结
- IE框架中访问不同域的网页遇到的问题
- 子框架页刷新父页面其它框架的办法
- Tiles框架 页面排版方面的框架
- 页面框架
- 页面框架
- 在网页frameset结构中,如何在框架内的页面访问框架
- layui框架详细分析系列之熟悉框架以及提供的页面元素
- TP框架中的页面继承,以及控制器
- Vc6.0中视类如何获得框架类,以及框架类如何获得视类
- iframe与主框架跨域访问
- 在框架窗口中如何获得,视图类的指针以及文档,视图,框架窗口指针的获取与应用
- 使用框架页面的跳转
- frameset页面框架的问题
- 关于页面框架的介绍
- 发现的window.open() 和location.href的区别。
- Delphi XE 的字符串理解
- 发篇面经,感谢北邮人对我的帮助~(摘自北邮人论坛)
- 教你们怎么从菜鸟级别到电脑高手
- 面试困惑问与答(2)——感觉挺好,为啥被拒了?
- 枚举IE页面框架以及获得跨域框架的控制权/访问框架页
- 加入中国 HTML5 研究小组
- Delphi XE 的一些新函数
- 公司培训-我该去吗?
- 《算法设计与分析基础》第一、二章
- strtotime函数的相关应用
- Apache + Tomcat集群配置详解
- Linux基本命令
- 汪教授的离散数学2011-02-25逻辑