作者:绿色风
分类:
时间:2022-08-17
浏览:142
楼主 xmyjk |
Q:如何获取http://iport.sctcn.com/portal/page/portal/PG_IPort/Tab_OI?p_parametertype=ContainerInfo&p_parametervalue=OOLU7530910,框架内的页面数据,如图,
A:框架页面是运用**页技术,用脚本写出来的,没有实际的URL,无法用之前的帖子所讲的方法绕过框架页面禁止访问的做法。 如果直接访问该框架页面,会出现,禁止跨域访问的提示。 大家可以使用如下程序试看看,试图访问框架内数据,系统是不允许的。
拒绝示例.zip
- Public flag '设置标记
- Sub t()
- Dim t As Single, dm
- flag = False
- UserForm1.Show 0 '显示窗体
- UserForm1.WebBrowser1.Navigate "http://iport.sctcn.com/portal/page/portal/PG_IPort/Tab_OI?p_parametertype=ContainerInfo&p_parametervalue=OOLU7530910" '激活网页
- Do Until UserForm1.WebBrowser1.Busy = False And UserForm1.WebBrowser1.ReadyState = READYSTATE_COMPLETE '一下均是等待加载框架页面加载完毕
- DoEvents
- Loop
- Do Until flag = True
- DoEvents
- Loop
- t = Timer
- Do Until Timer = t + 1
- DoEvents
- Loop
- Set dm = UserForm1.WebBrowser1.Document.frames(0).Document '直接访问框架内页面,将被禁止。
- End Sub
将提示如图,这是由于微软禁止跨域访问造成的。为了安全性的考虑。
引用Edanmo's OLE inte**ces & functions 是国外一个高手Edanmo写的OLELIB.TLB,作为框架的容器。 解压缩附件OLELIB.zip,放在C:\WINDOWS\system32里面就可以了。具体代码如下:- Option Explicit
- Public flag As Boolean
- Sub t()
- Dim getf As WebBrowser, dm As Object, tb As Object, t As Single
- flag = False
- UserForm1.cf = 0
- UserForm1.Show 0
- UserForm1.WebBrowser1.navigate "http://iport.sctcn.com/portal/page/portal/PG_IPort/Tab_OI?p_parametertype=ContainerInfo&p_parametervalue=OOLU7530910" '激活网页
- Do Until UserForm1.WebBrowser1.Busy = False And UserForm1.WebBrowser1.readyState = READYSTATE_COMPLETE '待加载完毕
- DoEvents
- Loop
- Do Until flag = True
- DoEvents
- Loop
- t = Timer
- Do Until Timer = t + 1
- DoEvents
- Loop
- Set getf = getFrames(UserForm1.WebBrowser1) '把框架页面用容器进行剥离
- Set dm = getf.document '提取文档体
- Set tb = dm.all("tableInfo2") '获取数据表
- MsgBox tb.Rows(5).Cells(4).innerText '提取所需数据
- End Sub
- Function getFrames(ByVal WB As WebBrowser) As Object '剥离页面框架的函数
- Dim pContainer As olelib.IOleContainer
- Dim pEnumerator As olelib.IEnumUnknown
- Dim pUnk As olelib.IUnknown
- Dim pBrowser As WebBrowser
- Set pContainer = WB.document '取得主页面文档
- If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then '历遍主页面文档框架
- Set pContainer = Nothing
- Do While pEnumerator.Next(1, pUnk) = 0
- Set pBrowser = pUnk
- If pBrowser.LocationURL Like "http://iport.sctcn.com/oi/action?SSOToken=*&ParameterType=ContainerInfo&ParameterValue=OOLU7530910&LocaleCode=zhs&moduleName=oi&logout=&loginUrl=" Then '可以在这里加条件判断得到指定的frame,基本可以根据url或者innerHTML中的某个关键字符
- Set getFrames = pBrowser '提取框架
- Exit Function
- End If
- Loop
- Set pEnumerator = Nothing
- End If
- End Function
窗体里面的代码如下:- Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
- If pDisp Is WebBrowser1 Then '页面含框架页面加载完毕,pDisp返回的是webbrowser自身
- flag = True
- End If
- End Sub
OLELIB.zip wa1.rar |
2楼 亡者天下 |
禁止跨越访问是什么意思啊?
谢谢! |
3楼 xmyjk |
可以参阅:http://blog.sina.com.cn/s/blog_4adf2a990100uxaj.html |
4楼 千年一梦遥 |
先抱回家,再慢慢研究. |
5楼 老糊涂 |
学习 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一