Я хочу получить данные, установив флажки на веб-странице - PullRequest
0 голосов
/ 08 декабря 2018

Я хотел бы получить данные для определенных диапазонов дат с веб-сайта.Адрес сайта: "http://arsiv.mackolik.com/Canli-Sonuclar".. В этом адресе есть поля, которые следует выбирать или не выбирать." Futbol (futbol-text) "," Basketbol (basketbol-text) "будет выбран из этих полей".Tarihe Göre (aOrderBydate) "будет выбран. Но" Duello (chkDuel) "," Iddaa (chkIddaa) "," Canlı (chkLive) "и" Seçili (chkSelected) "не будут отмечены. В соответствии с этими предпочтениями яхотел бы передать все данные в таблице «list-table» вместе с адресами ссылок. Например, я возьму данные за месяц за один раз и перенесу их в таблицу Excel. Я не написал код оэто или изменил код.

1 Ответ

0 голосов
/ 13 декабря 2018

Следующее сделает выбор;имеет javascript, позволяющий дождаться нажатия на элемент;делает отмены выбора, которые вы указываете;и показывает, как изменить дату обратно с шагом в один день.

Option Explicit

Public Sub MakeSelections()
    Dim d As WebDriver, t As Date, ws As Worksheet, i As Long, table As Object
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Const MAX_WAIT_SEC As Long = 10
    Const URL = "http://arsiv.mackolik.com/Canli-Sonuclar#"

    Const JS_WAIT_CLICKABLE = _
    "var target = this, endtime = Date.now() + arguments[0];" & _
    "(function check_clickable() {" & _
    "  var r = target.getBoundingClientRect(), x = r.left+r.width/2, y = r.top+r.height/2;" & _
    "  for (var e = document.elementFromPoint(x , y); e; e = e.parentElement)" & _
    "    if (e === target){ callback(target); return; }" & _
    "  if (Date.now() > endtime) { callback(target); return; }" & _
    "  setTimeout(check_clickable, 60);" & _
    "})();"                                      'by @florentbr

    Set d = New ChromeDriver

    With d
        .Start "Chrome"
        .get URL
        .Window.Maximize

        With .FindElementByCss("[data-cc-event='click:dismiss']")
            .ExecuteAsyncScript(JS_WAIT_CLICKABLE, 3000) _
        .Click
        End With
        .FindElementByCss("#chkSport1").ScrollIntoView

        With .FindElementByCss("#chkSport1")
            If Not InStr(.Attribute("class"), "selected") > 0 Then
                .Click
            End If
        End With
        With .FindElementByCss("#chkSport2")
            If Not InStr(.Attribute("class"), "selected") > 0 Then
                .Click
            End If
        End With
        With .FindElementByCss("#aOrderByDate")
            .ExecuteAsyncScript(JS_WAIT_CLICKABLE, 3000) _
            .Click
        End With
        With .FindElementByCss("#chkDuel")
            If InStr(.Attribute("class"), "selected") > 0 Then
                .Click
            End If
        End With

        With .FindElementByCss("#chkIddaa")
            If InStr(.Attribute("class"), "selected") > 0 Then
                .Click
            End If
        End With
        With .FindElementByCss("#chkLive")
            If InStr(.Attribute("class"), "selected") > 0 Then
                .Click
            End If
        End With
        With .FindElementByCss("#chkSelected")
            If InStr(.Attribute("class"), "selected") > 0 Then
                .Click
            End If
        End With

        Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        'go back a day at a time.Add a loop here to change multiple days.
        For i = 1 To 2
            If i > 1 Then
                .FindElementByCss("[onclick='gotoDate(-1);']").Click
            End If
            t = Timer
            Do
                DoEvents
                On Error Resume Next
                Set table = .FindElementByCss(".list-table")
                If Timer - t > MAX_WAIT_SEC Then Exit Do
                On Error GoTo 0
            Loop While table Is Nothing
            'other code
        Next

        Stop                                     '<== Delete me later

        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...