【问题标题】:VBA IE Automation - Read iFrameVBA IE 自动化 - 读取 iFrame
【发布时间】:2013-05-17 22:44:30
【问题描述】:

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

网站本身大量使用常规框架。但是,在我的流程的最后,它不是将我的数据填充到一个框架中,而是一个 iFrame 中。整个网站还有非常广泛的 javascript,使事情变得混乱。

获取 iFrame 的 src URL 并在新的浏览器中打开错误的页面(即页面显示错误文本而不是内容)。

我的问题:

如何通过 VBA 从 iFrame 中获取文本?

到目前为止我已经尝试过什么 (请随意跳过)

在特定的frame中定位特定的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

【问题讨论】:

  • 如果你分享链接我可以试试。这个链接可能对你有帮助vbaexpress.com/forum/showthread.php?t=40649
  • 您已经尝试过的具体问题是什么? “在特定框架中定位特定 iFrame,并抓取 innerHTML” 的代码看起来是正确的。
  • @Santosh 是私人内网,不能分享。不过,我之前确实看过那个帖子。问题是当我尝试按照它的建议导航到 iframe src 时,页面错误。我不认为导航到该页面是一种选择。
  • @Gaffi 该选项的问题在于它提取了错误的 HTML。我没有得到 iFrame 的内容,而是包含 iframe 标记本身的 html。
  • @AaronContreras 我已经做到了。再次是 Intranet 站点。

标签: internet-explorer vba iframe automation


【解决方案1】:

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

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

【讨论】:

  • 这个问题有点老了,所以我面前不再有这个项目了。但是,我会尽快将其挖掘出来并对其进行测试,以供后代使用。我会说这至少看起来很有希望,我搜索了它的不同部分,似乎对它(或非常相似的代码)的使用达成了一些共识。
  • 我知道这个问题有点老了......我登陆这个页面搜索解决方案......但不知何故我得到了解决方案,所以我粘贴了对我有帮助的东西......将来可能会成为一些人得到好处..不明白投票否决的原因?
  • 是的,我也不知道为什么它也被否决了,但它不是我的。很抱歉造成混乱。
  • 对不起..没问题..投反对票的人一定有更好的解决方案..请粘贴解决方案匿名人士..请分享您的知识..
【解决方案2】:

试试这个...

Dim elemCollection As IHTMLElementCollection

Set elemCollection = objDoc.frames("iFrameID").document.all
Debug.Print elemCollection.Item("pagemenuli-adv").innerText

【讨论】:

    【解决方案3】:

    我遇到了类似的问题,终于解决了:

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

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

    我是 VBA 新手,能否解释一下 Frames(0)/forms (0) 中的 0 到底是什么?

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

    【讨论】:

    • 你不应该在回答中提问
    • 没有检查提示,抱歉,我会发布一个新问题。
    【解决方案4】:

    尝试使用:

    `Dim iFrm As HTMLIFrame
    Set iFrm = ie.document.frames(myFrameNum).document.getElementByID("iFrameID")
    Debug.Print iFrm.contentDocument.body.innerHTML`
    

    【讨论】:

    • 您是否只是从“我尝试过但不起作用的事情”部分复制/粘贴了这个??
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2021-01-25
    • 2016-08-23
    相关资源
    最近更新 更多