【问题标题】:How to click a <button> in VBA如何在 VBA 中单击 <button>
【发布时间】:2019-06-19 19:51:02
【问题描述】:

我需要帮助单击一个按钮,然后使用 VBA 在网页上选择选项。

网页链接:https://clinicaltrials.gov/ct2/results?cond=&term=Medpace&cntry=&state=&city=&dist=

我需要点击“显示/隐藏列”,然后选择“学习类型”、“阶段”、“赞助商/合作者”、“已注册人数”、“NCT 编号”、“学习开始”、“学习完成”和“上次发布的更新”。

“显示/隐藏列”按钮的类:.getElementsByClassName("dt-button buttons-collection buttons-colvis").click

Private Sub Workbook_Open()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.application")
    With IE
        .Visible = True
        .Navigate ("https://clinicaltrials.gov/ct2/results?cond=&term=Medpace&cntry=&state=&city=&dist=")
        While .Busy Or .readyState <> 4: DoEvents: Wend

        With IE.document
            IE.Refresh
            .getElementsByClassName("dt-button buttons-collection buttons-colvis").click
            .querySelector("#save-list-link").click
            .querySelector("#number-of-studies option:last-child").Selected = True
            ' .querySelector("#which-format option:fourth-child").Selected = True
            ' .querySelector("#which-format").selectedIndex = 3
            ' .querySelector ("#number-of-studies").selectedIndex = 1
            ' .querySelector("[value=csv]").click
            .querySelector("#submit-download-list").click

        ' Set div = IE.document.getElementById("save-list-link")
        ' div.FireEvent "onclick"
        End With
        Application.Wait Now + TimeSerial(0, 0, 10)
        Application.SendKeys "%+s", True
        Application.Wait Now + TimeSerial(0, 0, 10)
        .Quit

    ' For Each elt In IE.document.getElementById("number-of-studies")
        ' If InStr(elt.innerText, "Found") > 0 Then elt.click: Exit For
    ' Next elt

    ' Set div4 = IE.document.getElementById("submit-download-list")
    ' div4.click
    End With
End Sub

【问题讨论】:

  • 为什么不直接使用xmlcsv 数据下载链接?

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


【解决方案1】:

在数组中添加您想要的其他选项,然后循环所有按钮,检查按钮的 innerText 是否在数组中。如果是则设置类名,使按钮处于活动状态

Option Explicit
Public Sub MakeSelections()
    Dim ie As Object, options()
    options = Array("Study Type", "Phase", "Sponsor/Collaborators", "Number Enrolled", "NCT Number", "Study Start", "Study Completion", "Last Update Posted")
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://clinicaltrials.gov/ct2/results?cond=&term=Medpace&cntry=&state=&city=&dist="

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

        With .document
           .querySelector(".buttons-collection").Click 'show/hide
           Dim buttons As Object, i As Long
           Set buttons = .querySelectorAll(".two-column button")
           For i = 0 To buttons.Length - 1
               If Not IsError(Application.Match(Trim$(buttons.item(i).innerText), options, 0)) Then
                   buttons.item(i).className = "dt-button buttons-columnVisibility active"
               End If
           Next
        End With
        Stop
        .Quit
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2017-09-26
    • 2020-02-10
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多