【发布时间】:2017-03-06 06:52:39
【问题描述】:
我只是无法让 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 中也没有返回错误。
注意手动单击该链接时不会导航到新网页。我认为它正在调用一个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>
如果您有任何建议和帮助,我将不胜感激。
谢谢。
【问题讨论】:
-
网站是否公开?可以发个网址吗?您的 doevents 循环并不能保证 html 已准备就绪。要对此进行测试,请尝试手动加载页面,然后仅从此时开始运行您的应对 - html.getElementsByTagName("a")
-
您好,很遗憾,我无法发布该 URL,因为它不是公开的。它需要用户名和密码。我尝试在触发点击操作之前添加一个 10 秒的等待计时器,但没有任何反应。我还尝试了您等待页面手动加载的建议,但再次没有任何反应。只是为了澄清一下,上一个链接点击(可以正常工作)实际上加载并导航到新页面。但是,我卡住的这个链接(link.innerHTML = "InformalEntries")在单击时不会加载新页面 - 它调用一个函数并将报告/数据获取到当前页面。
-
等待计时器无法工作,因为它在同一个线程上
-
要明确,除了获取现有的 NOT NEW IE 之外,您的代码以 Set ElementCol ... 开头。
-
正确 - 在 Set ElementCol 之前运行良好。
标签: javascript html excel vba click