10

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

该网站本身非常大量地使用常规框架。但是,在我的流程的最后,它不是将我的数据填充到一个框架中,而是一个 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
4

4 回答 4

10

我遇到了同样的问题,我使用以下脚本行得到了解决方案..

IE.Document.getElementsbyTagName("iframe")(0)。contentDocument .getElementsbyTagName("body")(0).innertext

于 2015-01-19T05:37:14.773 回答
7

尝试这个...

Dim elemCollection As IHTMLElementCollection

Set elemCollection = objDoc.frames("iFrameID").document.all
Debug.Print elemCollection.Item("pagemenuli-adv").innerText
于 2015-02-16T18:59:18.650 回答
0

我遇到了类似的问题,最后使用以下方法解决了它:

ObjIE.document.frames(0).document.forms(0).innerText

注意:我需要的文本以位于 iframe 中的形式存在。

是 VBA 的新手,有人可以解释 Frames(0)/forms (0) 中的 0 到底是什么吗?

如果它类似于帧索引或帧号(根据我的假设),请告诉我我们如何找到帧索引(在任何 HTML 中)?

于 2015-07-31T06:40:24.107 回答
-1

尝试使用:

`Dim iFrm As HTMLIFrame
Set iFrm = ie.document.frames(myFrameNum).document.getElementByID("iFrameID")
Debug.Print iFrm.contentDocument.body.innerHTML`
于 2014-12-02T17:35:10.980 回答