Ошибка автоматизации Internet Explorer в VBA Excel - PullRequest
0 голосов
/ 19 апреля 2019

Контекст

В настоящее время я пытаюсь создать инструмент для просмотра веб-страниц для определенного веб-сайта.

Механизм входа на веб-сайты представляет собой проверку физического файланаходится на компьютере, который вызывается через надстройку Internet Explorer, которая требует от меня использовать VBA, а не Python и т. д.

Кроме того, структура сайта с использованием XML также нецелесообразна.


Проблема

При входе на веб-сайт (который принадлежит правительству) возникает странная причуда, когда после входа в систему он сообщает вам, что произошел сбой, после чего вы простоснова войдите в систему из того же окна (просто нажмите «Назад» и введите свои данные второй раз), после чего он успешно войдет в систему.

При загрузке веб-сайта также требуется, чтобы были включены ваши типичные настройки, что и определяетиспользование InternetExplorerMedium или вызов оболочки.

Когда я запускаю процесс, я обычно использую .goback как часть моего с ie statОднако, когда я пытаюсь это сделать, я получаю отключенную ошибку от объекта.Кроме того, если я пытаюсь запустить .navigate по той же ссылке, я получаю ту же ошибку.В частности:

Run-time error '-2147417848 (80010108)':
Automation error
The object invoked has disconnected from its clients

Предыдущая строка кода представляет собой отправку формы, и я не уверен, вызывает ли это вызов отключение от Internet Explorer?

html.forms(0).submit

Попытки:

У меня есть:

  • Попытка запустить этот процесс в InternetExplorerMedium и shellcall безуспешно (не удается загрузить сайт без ошибки времени выполнения)

  • попытался использовать .goback безуспешно (ошибка отключения).

  • прикреплен для перехода к исходной ссылке безуспешно (ошибка отключения).

  • включал паузы на несколько секунд между попытками загрузки страницы (без изменений, ошибка отключения)

  • попытался выполнить любую функцию с помощью IE(ошибка разъединения).

По какой-то причине он появляется после того, как я использовал:

html.forms(0).submit

сеанс IE отключается.

Какпоследний способ, я попытался отправить форму, нажав кнопкунажмите кнопку джина (продолжить) и используйте вызовы .fireEvent, однако по какой-либо причине ни один из этих параметров не работает (нет ошибки, просто нет взаимодействия с сеансом IE.

Эта кнопка имеет следующую информацию элемента проверки,в случае, если может быть сделано другое предложение:

  <button tabindex="10" title="Continue authentication with selected credential"
    class="continueButton actionButton" id="imgContinue" role="button"
    style='background-image: url("/S001v4.0/Images/buttonGreenTick.png");
    ' onclick="Continue(this);" onfocus="continueFocused=true;" 
    onblur="cancelFocused=false;" type="button">CONTINUE</button>

Ниже приведен код соответствующего раздела, URL-адрес опущен, поскольку это внутренний правительственный сайт, к которому никто не имеет доступа в любом случае:

Sub StackOverflowCode()

    Dim ie As InternetExplorer
    Set ie = New InternetExplorer

    Dim UrlNavi As String
    UrlNavi = Sheets("EngineRoom").Range("B2")

    With ie
        .navigate UrlNavi
        Application.Wait (Now + TimeValue("00:00:05"))
        .Visible = True
        .AddressBar = False
        Do While ie.readyState <> READYSTATE_COMPLETE
            DoEvents
        Loop

        Dim html As HTMLDocument
        Set html = ie.document

        html.getElementById("ctl00_ContentPlaceHolder1_PassiveIdentityProvidersRepeater_ctl00_RealmButton").Click

        html.getElementById("txtPassword").innerText = Sheets("engineroom").Range("B4").Value
        html.forms(0).submit

        ' Anything past here is a disconnection error

        .GoBack
        .navigate UrlNavi
        Do While ie.readyState <> READYSTATE_COMPLETE
            DoEvents
        Loop

        html.getElementById("txtPassword").innerText = Sheets("engineroom").Range("B4").Value
        html.forms(0).submit

    End With

End Sub

Следует отметить, что код with ie не заканчивается до второй последней строки вышеуказанного кода.


Ожидаемый результат

IE должен бытьзапущен, окно показано как видимое, панель навигации скрыта.Веб-сайт должен войти в систему, вернуться к предыдущему (исходный URL) и войти снова.


Версии программного обеспечения

Excel 2016,Internet Explorer 11.0.115

Ссылки включены:

Visual Basic для приложений, библиотека объектов Microsoft Excel 16.0, OLEАвтоматизация, библиотека объектов Microsoft Office 16.0, библиотека объектов Microsoft HTML, Microsoft XML, V6.0, элементы управления Microsoft Internet, библиотека объектов Microsoft Forms 2.0

...