我们的业务使用基于浏览器的程序进行操作。我正在自动化解决方案以浏览此站点,并在最后检索一些数据。
网站本身非常使用常规框架。但是,在我的过程的最后,它不会将我的数据填充到框架中,而是填充到iFrame中。整个网站上也有非常广泛的javascript,让事情变得混乱。
抓住iFrame的src URL并在新浏览器中打开错误页面(即页面显示错误文本而不是内容)。
我的问题:
如何通过VBA从iFrame中获取文本?
到目前为止我尝试了什么 (随意跳过):
定位特定框架中的特定iFrame,并获取innerHTML
With ie.document.frames(myFrameNum).document.getElementsByTagName("iframe")(1).document.body
stringResult = .innerHTML
在特定框架中按ID定位特定的iFrame,并抓取innerHTML
Dim iFrm As HTMLIFrame
Set iFrm = ie.document.frames(myFrameNum).document.getElementByID("iFrameID")
Debug.Print iFrm.document.body.innerText
查找iFrame的任何实例,并抓住它们(没有结果 - 也许是因为iframe嵌入到框架中?)
Dim iFrm As HTMLIFrame
Dim doc As HTMLDocument
For iterator = 0 To ie.document.all.Length - 1
If TypeName(ie.document.all(iterator)) = "HTMLIFrame" Then
Set iFrm = ie.document.all(iterator)
Set doc = iFrm.document
Debug.Print & doc.body.outerHTML
End If
Next
答案 0 :(得分:9)
我遇到了同样的问题,我使用以下脚本编写了解决方案..
IE.Document.getElementsbyTagName( “IFRAME”)(0)。的 contentDocument 强> .getElementsbyTagName( “正文”)(0).innertext
答案 1 :(得分:4)
试试这个......
Dim elemCollection As IHTMLElementCollection
Set elemCollection = objDoc.frames("iFrameID").document.all
Debug.Print elemCollection.Item("pagemenuli-adv").innerText
答案 2 :(得分:3)
Thanx abhinov .....
IE.Document.getElementsbyTagName("iframe")(0).contentDocument.getElementsbyTagName("body")(0).innertext...
这为我做了工作.....
答案 3 :(得分:0)
我遇到了类似的问题,最后用以下方法解决了问题:
ObjIE.document.frames(0).document.forms(0).innerText
注意:我需要的文本以位于iframe中的形式出现。
是VBA的新手,有些机构可以解释Frames(0)/ forms(0)中的0到底是什么吗?
如果它像帧索引或帧号(我的假设),请让我知道如何找到帧索引(在任何HTML中)?
答案 4 :(得分:-1)
尝试使用:
`Dim iFrm As HTMLIFrame
Set iFrm = ie.document.frames(myFrameNum).document.getElementByID("iFrameID")
Debug.Print iFrm.contentDocument.body.innerHTML`