【问题标题】:Select button by looping through all innerHTML通过循环遍历所有 innerHTML 来选择按钮
【发布时间】:2020-10-06 18:48:51
【问题描述】:

我正在尝试使用 queryselector 获取所有按钮,并通过循环查找 innerHTML 来选择特定按钮。

找到特定按钮后,当点击事件传递时,什么也没有发生。

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://www.spirit.com/"
Do Until IE.readyState = 4: Application.Cursor = xlDefault: DoEvents: Loop

Application.Wait (Now + TimeValue("00:00:03"))
IE.document.querySelector("label[for='radio-oneWay']").Click

Application.Wait (Now + TimeValue("00:00:03"))
IE.document.querySelector("input[id='flight-OriginStationCode']").Click
Set elems = IE.document.getElementsByTagName("button")

For Each elem In elems
    If (elem.innerHTML) = " Aguadilla, Puerto Rico (BQN) " Then
        elem.Click
        Exit For
    End If
Next elem

【问题讨论】:

    标签: vba internet-explorer


    【解决方案1】:

    可以通过SendKeys模拟输入来分配两个机场框,然后触发点击事件。日期输入和其他文本框将单独设置。下面是实现这个功能的代码:

    Private Sub CommandButton1_Click()
    
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate "https://www.spirit.com/"
    Do Until IE.readyState = 4: Application.Cursor = xlDefault: DoEvents: Loop
    
    Application.Wait (Now + TimeValue("00:00:03"))
    IE.document.querySelector("label[for='radio-oneWay']").Click
    
    Application.Wait (Now + TimeValue("00:00:03"))
    
    Set elems = IE.document.getElementsByTagName("button")
    
    Set txt1 = IE.document.getElementsByName("originStationCode")(0)
    txt1.Focus
    SendKeys ("BQN")
    Application.Wait (Now + TimeValue("00:00:01"))
    
    Set txt2 = IE.document.querySelector("input[id='flight-DestinationStationCode']")
    txt2.Focus
    SendKeys ("BDL")
    Application.Wait (Now + TimeValue("00:00:01"))
    
    Application.Wait (Now + TimeValue("00:00:01"))
    IE.document.querySelector("input[id='flight-Date']").Value = "2020/10/09-2020/10/19"
    IE.document.querySelector("input[id='promoCode']").Value = "xx"
          
    IE.document.querySelector("button[type='submit']").Click
    End Sub
    

    结果:

    【讨论】:

    • 是的,我试过了,但是在您通过点击事件选择机场之前,日期字段不会出现。我可以为始发机场和目的地机场设置输入值。但这不会带来仅在触发点击事件时出现的日期字段。
    • @Svj 我已经更新了我的答案,请检查一下。可以在机场输入框用SendKeys触发事件。
    • 感谢您的帮助。是的, sendkeys 方法有效。 Sendkeys("BQN") 不能一直完美运行,所以我将其更改为 Sendkeys("BQN", TRUE) 并等待 1 秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2021-11-27
    相关资源
    最近更新 更多