【发布时间】: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