使用VBA导航IE HTML文档中的href

时间:2018-12-16 06:44:19

标签: html excel vba internet-explorer web-scraping

我正在尝试使用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 :(得分:1)

1)如果与F8配合使用,通常是一个计时问题,则需要确定需要在哪里发生等待。

至少应确保在每个.Navigate2.Click.Submit之后使用适当的等待时间以允许页面加载:

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

可能也在之后:

HTMLInput.FireEvent("onchange")

2)推荐的方法是.navigate2,而不是.navigate