【问题标题】:VBA IE11 Browser Automation click Log Off button doesnt workVBA IE11浏览器自动化单击注销按钮不起作用
【发布时间】: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。

标签: excel vba


【解决方案1】:

按钮没有点击事件,它有一个 onmousedown 事件。您可以尝试使用以下代码行来触发此操作(为 browser.document 设置正确的字符串):

Call TriggerEvent(browser.document, LogOffButton, "onmousedown")

这个过程:

Private Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)

  Dim theEvent As Object

  htmlElementWithEvent.Focus
  Set theEvent = htmlDocument.createEvent("HTMLEvents")
  theEvent.initEvent eventType, True, False
  htmlElementWithEvent.dispatchEvent theEvent
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多