【问题标题】:Excel VBA to activate selectitem in web and go web for dataExcel VBA 激活 web 中的选择项并上网获取数据
【发布时间】:2019-10-06 05:40:37
【问题描述】:

我很擅长 VBA。我尝试使用互联网上的所有潜在解决方案来激活 web 中的选择项并获取数据表,但它不起作用。下面是我的 Excel VBA 代码和 Javascript。

Sub GetQuarterFinancials()

Dim ie As Object, URL As String

    URL = "https://www.marketwatch.com/investing/stock/aapl/financials"
    Set ie = CreateObject("internetexplorer.application")

With ie
 .Visible = True
 .navigate URL

 Do While .Busy
   DoEvents
 Loop
 Do While .readyState <> 4
   DoEvents
 Loop

  Set ticker = ie.document.getElementById("autocomplete_input")
  ticker.value = "FB"

  .document.getElementById("investing_ac_button").Click
  Application.Wait (Now + TimeValue("00:00:05"))

  Set selectitem = ie.document.getElementsByTagName("select")
  For Each i In selectitem
           i.value = "/investing/stock/msci/financials/income/quarter"
           i.FireEvent ("onchange")
      Next i
 End With
End Sub





    <select style="float:right" onchange="window.location = this.options[selectedIndex].value;">
        <option value="/investing/stock/msci/financials" selected="selected">Annual Financials</option>
        <option value="/investing/stock/msci/financials/income/quarter" >Quarter Financials</option>
    </select>
    <div style="clear:both"></div>
</div>
    <div class="block">
        <h2>Annual Financials for MSCI Inc.</h2>

【问题讨论】:

    标签: html excel vba web-scraping onchange


    【解决方案1】:

    您可以使用css attribute = value selector 从下拉列表中定位适当的选项,然后选择它。

    Option Explicit
    
    'VBE > Tools > References:
    ' Microsoft Internet Controls
    
    Public Sub MakeSelections()
        Dim ie As New InternetExplorer
        With ie
            .Visible = True
            .Navigate2 "https://www.marketwatch.com/investing/stock/aapl/financials"
    
            While .Busy Or .readyState < 4: DoEvents: Wend
    
            With .document
                .querySelector("#autocomplete_input").Value = "FB" 'you could avoid search by adding ticker into url
                .querySelector("#investing_ac_button").Click
            End With
    
            While .Busy Or .readyState < 4: DoEvents: Wend
    
            Dim ele As Object
            With .document
                Do
                On Error GoTo 0
                Set ele = .querySelector("[value^='/investing/stock/fb/financials/income/quarter']")
                On Error Resume Next
                Loop While ele Is Nothing
                .querySelector("[value^='/investing/stock/fb/financials/income/quarter']").Selected = True
                .querySelector(".financials select").FireEvent "onchange"
                    Stop 'delete me later
            End With
            .Quit
        End With
    End Sub
    

    【讨论】:

    • Adding ticker into url 无疑是最好的选择。
    • 网页中选择了“季度财务”,但页面没有刷新。我如何将其编码为季度数据。谢谢
    • 您可能需要在选择元素上打开fireevent onchange
    • 第二个问题。我如何在股票代码之后编码“季度财务”? Ticker 是变体。谢谢
    • 我添加了 .querySelector("[value^='/investing/stock/fb/financials/income/quarter']").fireevent ("onchange") 但不起作用。我编码正确吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 2016-11-12
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2013-12-20
    相关资源
    最近更新 更多