我无法让VBA成功点击下拉悬停菜单中的一个链接(没有ID标签)。具体来说,我正在使用VBA登录站点并导航到从数据库返回信息的特定页面。
以下是带有链接的HTML菜单:
</head>
<body>
<script type="text/javascript" src="/APBKIS/js/struts-menu/coolmenu4-config.js"></script>
<div>
<ul id="primary-nav" class="menuList">
<li class="menubar">
<a href="javascript:void(0)" title="Service" target="_self">Service</a>
<ul>
<li class="menubar">
<a href="javascript:void(0)" title="Reports" target="_self">Reports</a>
<ul>
<li>
<a href="declRetrieval?asType=AIR" title="Formal Entries" target="_self">FormalEntries</a>
</li>
<li class="last">
<a href="declRetrieval?asType=BRIEF" title="InformalEntries" target="_self">InformalEntries</a>
</li>
</ul>
</ul>
</li>
<li class="menubar">
<a href="javascript:void(0)" title="UserData">UserData</a>
<ul>
<li>
<a href="CustProf!Approve" title="ChangeUserData">Change User Data</a>
</li>
<li class="last">
<a href="CustProf!ChgPwd" title="ChangePassword">Change Password</a>
</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
我正在尝试点击下拉菜单中的InformalEntries项目。
这是我目前的VBA代码的一部分:
Sub ReportCall()
Dim IE As InternetExplorer
Dim html As HTMLDocument
Dim link As Object
Dim ElementCol As Object
Application.ScreenUpdating = False
Set IE = New InternetExplorer
IE.Visible = True
IE.navigate "https://somesite.com"
Do Until Not IE.Busy And IE.readyState = 4
DoEvents
Loop
Set html = IE.document
html.getElementById("usrId").Value = "usernameabc"
html.getElementById("usrPwd").Value = "passwordabc"
'Click the "submit" button
html.getElementById("Image15").Click
Do Until Not IE.Busy And IE.readyState = 4
DoEvents
Loop
'html.getElementById("myThis").Click
Set ElementCol = html.getElementsByTagName("a")
For Each link In ElementCol
If link.innerHTML = "InformalEntries" Then
link.Click
End If
Next link
我试图通过下拉菜单(InformalEntries),没有任何反应,excel中也没有返回任何错误。
N.B。手动单击时链接不会导航到新网页。我认为它调用的是一个javascript函数,然后使用php将数据/信息返回到当前页面。通过html代码查看我认为这是在点击时调用的函数:
function viewPerm(actionUrl) {
jQuery.ajax({
type: "POST",
url: actionUrl,
data: null,
dataType: "html",
success: function(divDetail) {
ScreenConvert();
ShowDialog(divDetail, 700, 500);
},
error: function(req, status, error) {}
});
}
/*]]>*/
<
/script>
我很感激任何建议和帮助。
感谢。
答案 0 :(得分:0)
执行此操作时:
Set html = IE.document
它只有在您触发导航到另一个页面之后才有效:一旦页面重新加载,您对前一个文档的引用就不好了,您需要通过再次运行该行来重置它。