长方法:
这篇文章通过单击月份(向后箭头)和日期(通过在日历中循环日期并选择适当的日期)来导航
Option Explicit
Public Sub DateSelection()
'Max past date is 2 weeks prior to today's date
Dim dateToUse As String, lastSundayPriorMonth As Long, numberOfIndicesToIgnore As Long
dateToUse = "2018-09-28"
If Not IsDateValid(dateToUse) Then
MsgBox "Please select a date between " & Format$(DateAdd("ww", -2, Date) + 1, "yyyy-mm-dd") & " and " & Format$(Date, "yyyy-mm-dd")
Exit Sub
End If
lastSundayPriorMonth = GetLastSunday(DateAdd("m", -1, CDate(dateToUse)))
numberOfIndicesToIgnore = Abs(CDate(dateToUse) - lastSundayPriorMonth) '<==Dates from prior month to ignore on displayed calendar
Dim dates As Object, ie As InternetExplorer, i As Long
Set ie = New InternetExplorer
With ie
.Visible = True
.navigate "https://www.xscores.com/soccer/livescores"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
Dim numberOfMonthsInPast As Long
numberOfMonthsInPast = GetNumberOfMonthsBack(dateToUse)
.querySelector(".dateDetails").Click
If numberOfMonthsInPast > 0 Then
For i = 1 To numberOfMonthsInPast 'navigate back the required number of months
.querySelector(".calendar-prev").Click
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
Next
End If
Set dates = .querySelectorAll(".calendar-dates [class^=date]") '<== All dates in selected month view
For i = numberOfIndicesToIgnore To dates.Length - 1
If CInt(dates.item(i).innerText) = Day(dateToUse) Then
dates.item(i).querySelector("a").Click
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
Exit For
End If
Next
'other code
End With
Stop '<==Delete me later
.Quit
End With
End Sub
Public Function GetLastSunday(ByVal dateString As String) As Long
Dim d As Date
d = DateSerial(YEAR(dateString), Month(dateString) + 1, 1) - 1
GetLastSunday = d - Weekday(d) + 1
End Function
Public Function IsDateValid(ByVal dateString As String) As Boolean
IsDateValid = (DateDiff("ww", dateString, Date) >= 0 And DateDiff("ww", dateString, Date) <= 2)
End Function
Public Function GetNumberOfMonthsBack(ByVal dateString As String) As Long
GetNumberOfMonthsBack = DateDiff("m", dateString, Date)
End Function
首选:
我似乎仍然可以通过简单地使用
dd-mm
Option Explicit
Public Sub test()
Dim ie As New InternetExplorer
With ie
.Visible = True
.navigate "https://www.xscores.com/soccer/livescores/19-09"
While .Busy Or .readyState < 4: DoEvents: Wend
Stop '<== Delete me later
.Quit
End With
End Sub
今日数据2018-10-03(前几行):
2018-09-19手动选择日期(顶行):
2018-09-19代码运行结果:
一轮一轮:
Option Explicit
Public Sub DateSelection()
'Max past date is 2 weeks prior to today's date
Dim dateToUse As String, lastSundayPriorMonth As Long, numberOfIndicesToIgnore As Long
dateToUse = "2018-09-18"
lastSundayPriorMonth = GetLastSunday(DateAdd("m", -1, CDate(dateToUse)))
numberOfIndicesToIgnore = Abs(CDate(dateToUse) - lastSundayPriorMonth) '<==Dates from prior month to ignore on displayed calendar
Dim dates As Object, ie As InternetExplorer, i As Long
Set ie = New InternetExplorer
With ie
.Visible = True
.navigate "https://www.xscores.com/soccer/livescores"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
Dim numberOfMonthsInPast As Long
numberOfMonthsInPast = GetNumberOfMonthsBack(dateToUse)
.querySelector(".dateDetails").Click
If numberOfMonthsInPast > 0 Then
For i = 1 To numberOfMonthsInPast 'navigate back the required number of months
.querySelector(".calendar-prev").Click
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
Next
End If
Set dates = .querySelectorAll(".calendar-dates [class^=date]") '<== All dates in selected month view
For i = numberOfIndicesToIgnore To dates.Length - 1
If CInt(dates.item(i).innerText) = Day(dateToUse) Then
If Not IsDateWithin2Weeks(dateToUse) Then
With dates.item(i)
.outerHTML = Replace(dates.item(i).outerHTML, " disabled", vbNullString)
Set dates = ie.document.querySelectorAll(".calendar-dates [class^=date]") '<== All dates in selected month view
End With
End If
dates.item(i).querySelector("a").Click
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
Exit For
End If
Next
'other code
End With
Stop '<==Delete me later
.Quit
End With
End Sub
Public Function IsDateWithin2Weeks(ByVal dateString As String) As Boolean
IsDateWithin2Weeks = (DateDiff("ww", dateString, Date) >= 0 And DateDiff("ww", dateString, Date) <= 2)
End Function