Использование VBA для навигации по href в HTML-документе IE - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь использовать VBA для навигации по IE, чтобы найти некоторую информацию для меня.Однако после того как код написан и я его запускаю.Я обнаружил, что все хорошо перед тем, как нажать href, но если я использую «F8» для выполнения кода один за другим, и это работает.К сожалению, я не нашел подобной ситуации на этом форуме.Может ли кто-нибудь дать мне намеки?Спасибо

Sub GetData()
    Dim IE As New SHDocVw.InternetExplorer
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLInput As MSHTML.IHTMLElement
    Dim HTMLButton As MSHTML.IHTMLElement
    Dim HTMLAllhref As MSHTML.IHTMLElementCollection

    studentid = 12345678

    Set IE = New InternetExplorerMedium
    IE.Visible = True
    IE.Navigate "https://xxx.xxx"

    Do While IE.ReadyState <> READYSTATE_COMPLETE
    Loop

    Set HTMLDoc = IE.Document
    Set HTMLInput = HTMLDoc.getElementById("abcd")
    HTMLInput.Focus
    HTMLInput.FireEvent("onchange")
    HTMLInput.Value = studentid

    Set HTMLButton = HTMLDoc.getElementById("submit")
    HTMLButton.Click

Приведенная выше часть работает правильно, но следующая часть работает, только если я использую «F8» для выполнения одного за другим

    Set HTMLAllhref = HTMLDoc.GetElementsByTagName ("a")
    For Each link in HTMLAllhref
        If InStr(link.innerText, studentid) Then
            IE.Navigate link.href
            Exit For
        End If
    Next
End Sub

1 Ответ

0 голосов
/ 16 декабря 2018

1) Если работает с F8, обычно это проблема синхронизации, и вам нужно определить, где должно произойти ожидание.

Как минимум, обязательно используйте правильное ожидание после каждого .Navigate2, .Click и .Submit, чтобы разрешить загрузку страницы:

While IE.Busy Or ie.readyState < 4: DoEvents: Wend

Потенциально также после:

HTMLInput.FireEvent("onchange")

2) Рекомендуемый метод .navigate2, а не .navigate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...