Как действовать несколькими нажатиями кнопок на веб-странице - PullRequest
1 голос
/ 02 июня 2019

В настоящее время извлекает данные с веб-страницы (https://www.oddschecker.com/golf/memorial-tournament/winner).

Перед извлечением данных я бы хотел, чтобы формат данных был десятичным, а не дробным. Это можно сделать, щелкнув «колесо» в правом верхнем углу страницы, а затем нажав «десятичное число».

В коде VBA не возникает ошибок, однако после передачи данных в таблицу Excel данные остаются в дробном формате.

Любые мысли по этому поводу будут с благодарностью.

Sub ScrapeOdds()

    Dim IE As New SHDocVw.InternetExplorer
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLTable As MSHTML.IHTMLElement
    Dim HTMLDiv As MSHTML.IHTMLElement
    Dim InitialClick As Object
    Dim FinalClick As Object

    IE.Visible = True
    IE.navigate "https://www.oddschecker.com/golf/memorial-tournament/winner"

    Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy
    Loop

    Set HTMLDoc = IE.document
    Set HTMLDiv = HTMLDoc.getElementById("oddsTableContainer")
    Set HTMLTable = HTMLDiv.getElementsByTagName("table")(0)

    Set InitialClick = IE.document.getElementsByClassName("icon-item all-tools header-button")(0).Click
    Set FinalClick = IE.document.getElementsByClassName("OddsSettingsController as OddsSettingsController")

        For Each Obj In FinalClick

        If FinalClick.getAttribute("ng-click") = ("OddsSettingsController.setOddsType('decimal')") Then

        FinalClick.Click

        Exit For
        End If
        Next


    WriteTableToSheet HTMLTable

    IE.Quit

End Sub

1 Ответ

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

Вы можете нажать, как показано ниже. Интересующие вас линии выглядят следующим образом:

With .document
    If .querySelectorAll(".offer-close").Length > 0 Then .querySelector(".offer-close").Click
    .querySelector(".tools-icon").Click
    If .querySelectorAll("[title='Change to decimal odds']").Length > 0 Then .querySelector("[title='Change to decimal odds']").Click
End With

Проверяет, присутствует ли всплывающее объявление с предложением и закрывается:

If .querySelectorAll(".offer-close").Length > 0 Then .querySelector(".offer-close").Click

Это открывает колесо:

.querySelector(".tools-icon").Click

Это проверяет, выбран ли десятичный разделитель в настоящее время и, если нет, выбирает его

If .querySelectorAll("[title='Change to decimal odds']").Length > 0 Then .querySelector("[title='Change to decimal odds']").Click

Код ниже удаляет мусор, который находится в таблице при запуске.


VBA

Option Explicit

'VBE > Tools > References: Microsoft Internet Controls; HTML Object Library
Public Sub GetData()
    Dim ie As Object, hTable As HTMLTable, clipboard As Object, ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set ie = CreateObject("InternetExplorer.Application")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    With ie
        .Visible = True
        .Navigate2 "https://www.oddschecker.com/golf/memorial-tournament/winner"

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

        With .document
            If .querySelectorAll(".offer-close").Length > 0 Then .querySelector(".offer-close").Click
            .querySelector(".tools-icon").Click
            If .querySelectorAll("[title='Change to decimal odds']").Length > 0 Then .querySelector("[title='Change to decimal odds']").Click
        End With
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set hTable = .document.querySelector(".eventTable")
        clipboard.SetText hTable.outerHTML
        clipboard.PutInClipboard
        ws.Range("A1").PasteSpecial
        Dim cutOff As Range
        Set cutOff = ws.Columns(1).Find("QuickBet")
        If Not cutOff Is Nothing Then ws.rows("1:" & cutOff.Row).EntireRow.Delete
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...