VBA IE11 Browser Automation нажмите кнопку «Выход из системы» не работает - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь автоматизировать получение отчета с клиентского портала.

Выяснил, как манипулировать экземплярами, если IE, как перемещаться по фреймам. Несколько других препятствий.

У меня до 1 кнопки, которую я не могу нажать, не используя sendkeys для перехода по всей странице вверх.

(слегка санированный) HTML для элемента im пытается нажать:

<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 c, я могу успешно открыть диалоговое окно выхода из системы:

    ''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

В качестве go я пробовал это, и оно не работает (элемент фокусируется. Класс элемента изменяется. Окно выхода из системы не открывается ).:

Set LogOffButton = IE.document.getElementById("buttonlogoff")
LogOffButton.Focus
Application.SendKeys "~"

Я тыкал и подталкивал до тошноты. Я могу со 100% уверенностью сказать, что getElementByID успешно получает элемент HTML Span. Я пробовал каждую последовательность .FireEvent до щелчка. Я попытался захватить элемент ячейки таблицы HTML, в котором находятся эти элементы, и щелкнуть по нему.

Я при жизни не могу понять, почему щелчок правой и левой кнопкой мыши открывает окно, при нажатии на клавиатуре и нажатии клавиши ввода открывается окно application.sendkeys, и ожидание в течение минуты (почти всегда) работает, но .focus> SendKeys и .click на элементе не открывают окно.

Любой шанс для руководство по взлому этой головоломки?

1 Ответ

0 голосов
/ 17 января 2020

Кнопка не имеет события щелчка, она имеет событие 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...