【发布时间】:2020-01-16 21:20:13
【问题描述】:
我正在尝试自动从客户端门户中提取报告。
想出了如何在 IE 中处理实例,如何在 iframe 中导航。几乎没有其他障碍。
我只剩下 1 个按钮,如果不使用 sendkeys 一直向上跳到页面,我就无法点击。
我试图点击的元素的(轻微净化的)HTML 是:
<span class="logoff_container" id="logoff">
<span tabindex="0" title="Log off" class="logofflink logofflinkNormal" id="buttonlogoff" onmouseover="logofflink._handlers.onlogofflinkMouseHover('buttonlogoff');" onmouseout="logofflink._handlers.onlogofflinkOut('buttonlogoff');" onmousedown="logofflink._handlers.onlogofflinkMouseDown('buttonlogoff');" onfocus="logofflink._handlers.onlogofflinkMouseHover('buttonlogoff');" onblur="logofflink._handlers.onlogofflinkOut('buttonlogoff');">
<span class="button_inner">Log off</span></span></span>
使用这个 sendkeys 逻辑,我可以成功打开注销对话框:
''Logout
For i = 1 To 32
Application.SendKeys "+{Tab}"
Application.Wait (Now + TimeValue("0:00:01") * 0.55)
Next i
Application.Wait (Now + TimeValue("0:00:03"))
Application.SendKeys "~"
我希望能够使注销对话框显示为:
IE.document.getElementByID("buttonlogoff").Click
作为一个中间人,我试过这个,它不起作用(元素聚焦。元素的类发生变化。注销窗口没有打开)。:
Set LogOffButton = IE.document.getElementById("buttonlogoff")
LogOffButton.Focus
Application.SendKeys "~"
我戳戳戳戳戳戳恶心。我可以 100% 肯定地说 getElementByID 已成功获取 HTML Span 元素。在点击之前,我已经尝试了每个 .FireEvent 序列。我尝试抓取这些元素所在的 HTML 表格单元格元素并单击它。
我一生都无法弄清楚为什么用鼠标左右单击会打开窗口,键盘选项卡和按 Enter 会打开窗口,application.sendkeys 并等待一分钟(几乎总是)有效,但是.focus > SendKeys 和 .click 元素不会打开窗口。
有没有机会获得一些关于如何破解这个谜题的指导?
【问题讨论】:
-
按钮是表单的一部分吗?
-
例如,如果表单可能类似于
IE.document.forms(0).Submit而没有看到完整的 html 代码,则无法确定,但是您在此处的代码IE.document.getElementByID("buttonlogoff").Click看起来是正确的,所以我认为它必须在表单内.. 在查看 html 元素时对 word 形式进行搜索.. -
页面上有表单,但我不相信按钮是其中任何一个的一部分。它在一个表中,在另一个表中,在 div 中。这让我很困惑,因为我认为您必须获取每个表,然后获取元素才能获取元素,但正如我所说,我成功地专注于元素。
-
也许我的答案.. 尚未被接受.. 但里面有大量代码... 将帮助您解决这个问题:stackoverflow.com/questions/59721130/…
-
你可以使用 ExecScript 来触发 JS。