VBA IE Automation - 阅读iFrame

时间:2013-05-22 18:38:16

标签: internet-explorer vba iframe automation

我们的业务使用基于浏览器的程序进行操作。我正在自动化解决方案以浏览此站点,并在最后检索一些数据。

网站本身非常使用常规框架。但是,在我的过程的最后,它不会将我的数据填充到框架中,而是填充到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

5 个答案:

答案 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`