Как нажать <button>в VBA - PullRequest
       21

Как нажать <button>в VBA

1 голос
/ 19 июня 2019

Нужна помощь: нажмите кнопку, а затем выберите параметры на веб-странице с помощью VBA.

Ссылка на веб-страницу: https://clinicaltrials.gov/ct2/results?cond=&term=Medpace&cntry=&state=&city=&dist=

Необходимо нажать «Показать / скрыть столбцы», затем выбрать «Тип исследования», «Фаза», «Спонсор / соавторы», «Зарегистрированное число», «Номер NCT», «Начало исследования», «Завершение исследования», «Последнее обновление опубликовано»

.getElementsByClassName ("кнопки-кнопки-коллекции кнопок-колвис"). Нажмите

Private Sub Workbook_Open () Тусклый IE как объект Установить IE = CreateObject ("InternetExplorer.application") С IE .Visible = True .Navigate ("https://clinicaltrials.gov/ct2/results?cond=&term=Medpace&cntry=&state=&city=&dist=") Пока .Busy или .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

1 Ответ

2 голосов
/ 19 июня 2019

У вас есть дополнительные желаемые опции в массиве, затем зациклите все кнопки, проверяя, находится ли 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
...