【问题标题】:Accessing Embedded HTML Elements with VBA Web Automation使用 VBA Web 自动化访问嵌入式 HTML 元素
【发布时间】:2018-03-08 10:05:17
【问题描述】:

几周前我刚刚学习了 VBA,我正在开发一个能够为我从网页中检索信息的项目。照原样,这项任务最多可能需要我 5 个小时才能手动完成。我正在尝试单击 .jsp 页面上的链接,该页面位于使用 javascript 在框架内导航的嵌入式网页上,来自在 excel 中运行的 VBA 脚本。不幸的是,该网页对于从外部来源链接有严格的规定,但网页层次结构是这样的:

<html>
    <head></head>
    <frameset>
        <frame name="DontCare1"></frame>
        <frameset>
            <frame name="OtherFrame1"></frame>
            <frame name="FrameName">
               #document<html></html> 
               <!--Inspect Page shows that the html is inside the #document tag-->
            </frame>
            <frame name="OtherFrame2"></frame>
        </frameset>
        <frame name="DontCare2"></frame>
    </frameset>
</html>

现在,我知道我的代码已设置为可以正确操作网页,因为在此之前它会访问标准页面并可以通过输入用户信息并单击提交来登录用户,因此我相当确定我的所有库和参考是有序的。

我有一个糟糕的方法来获得最深的帧,如下所示:

Dim theFrame As HTMLIFrame
Dim l2 As Variant, l3 As Variant, l4 As Variant
For Each l2 In .Document.getElementsByTagName("frameset")
            For Each l3 In l2.getElementsByTagName("frameset")
                For Each l4 In l3.getElementsByTagName("frame")
                    If l4.Name = "FrameName" Then
                        Set theFrame = l4 ' Find HTML page in this frame
                    End If
                Next l4
            Next l3
        Next l2

我已验证它正在将 theFrame 设置为正确的帧。现在我想是这样的:

For Each l2 In theFrame.getElementsByTagName("a")
            If l2.href="LinkIWantToClick" Then
                l2.Click
                Exit For
            End If
        Next l2

可行,但 theFrame.getElementsByTagName("a") 返回一个空集合或偶尔会引发运行时错误 91 或 438。我已经搜索了几乎所有我能想到的组合,可能有一个我可以适应使用的解决方案,但是到目前为止还没有这样的运气。

在点击链接后,我有更多的功能可以构建到其中,但我认为在我知道如何访问该链接之后,我应该可以很好地访问这些页面上的任何其他内容。对这门语言还是新手,不一定知道我在做什么,希望我没有错过一个明显的错误,所以你可以提供的任何建议都会有所帮助。

【问题讨论】:

  • 我在您提供的 html 示例中看不到任何 a 标记。 ...您可以发布带有a 标签的html吗? ...你能分享一下网址吗?
  • 一个框架类似于 window 对象 - 下一级是 document 所以你可能需要类似:For Each l2 In theFrame.document.getElementsByTagName("a")

标签: html excel vba web automation


【解决方案1】:

Tim Williams 是对的,框架中会嵌入另一个文档。我遇到了类似的问题,并且能够使用 contentDocument 访问我需要的元素。

例如:

TheFrame.contentDocument.getElementsByTagName("a")

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 2020-02-12
    • 2011-05-19
    • 2022-12-12
    • 2016-02-29
    • 1970-01-01
    • 2012-08-14
    • 2011-03-05
    相关资源
    最近更新 更多