Files
004_comission/abc2022d/task1/ticket0001/DisplaySectionalTime_aspx.bas
louiscklaw cd17b58401 update,
2025-01-31 19:19:02 +08:00

164 lines
5.2 KiB
QBasic

Attribute VB_Name = "DisplaySectionalTime_aspx"
Option Explicit
Public Function ScrapeDisplaySectionalTime(driver As WebDriver, ByVal race_date As String, race_num As String, row_offset As Integer, ByVal horse_count As Integer)
Dim COL_IDX_HORSE_NO As Integer
Dim COL_IDX_LAST_6_RUNS As Integer
Dim COL_IDX_COLOUR As Integer
Dim COL_IDX_HORSE As Integer
Dim COL_IDX_BRAND_NO As Integer
Dim COL_IDX_WT As Integer
Dim COL_IDX_JOCKEY As Integer
Dim COL_IDX_OVER_WT As Integer
Dim COL_IDX_DRAW As Integer
Dim COL_IDX_TRAINER As Integer
Dim COL_IDX_RTG As Integer
Dim COL_IDX_RTG_PLUS_MINUS As Integer
Dim COL_IDX_HORSE_WT_DECLARATION As Integer
Dim COL_IDX_WT_PLUS_MINUS_VS_DECLARATION As Integer
Dim COL_IDX_BEST_TIME As Integer
Dim COL_IDX_AGE As Integer
Dim COL_IDX_WFA As Integer
Dim COL_IDX_SEX As Integer
Dim COL_IDX_SEASON_STAKES As Integer
Dim COL_IDX_PRIORITY As Integer
Dim COL_IDX_DAYS_SINCE_LAST_RUN As Integer
Dim COL_IDX_GEAR As Integer
Dim COL_IDX_OWNER As Integer
Dim COL_IDX_SIRE As Integer
Dim COL_IDX_DAM As Integer
Dim COL_IDX_IMPORT_CAT As Integer
Dim script_content, script_result As String
Dim i, j As Integer
On Error GoTo ErrorHandler
' Navigate to a website.
Dim s_year, s_month, s_date, temp_new_date As String
s_year = Split(race_date, "/")(0)
s_month = Split(race_date, "/")(1)
s_date = Split(race_date, "/")(2)
temp_new_date = s_date & "/" & s_month & "/" & s_year
Dim s_race_date As String
s_race_date = Format(temp_new_date, "DD/MM/YYYY")
driver.Get "https://racing.hkjc.com/racing/information/chinese/Racing/DisplaySectionalTime.aspx?RaceDate=" & s_race_date & "&RaceNo=" & race_num
Dim startCell As Range
Set startCell = Worksheets("Sheet1").Range("A3")
' test if match result table found
Dim table_count, table_count_result As String
table_count_result = driver.ExecuteScript("{ return document?.querySelectorAll('.Race').length }")
table_count = CInt(table_count_result)
If (table_count > 0) Then
Dim hourse_table As Variant
script_content = "{" & _
" list_e = [];" & _
" document" & _
" .querySelector('table.race_table')" & _
" .querySelectorAll('tr')" & _
" .forEach((e_tr, idx) => {" & _
" if (idx > 2) {" & _
" list_td = [];" & _
" temp = e_tr.querySelectorAll('td');" & _
" list_td.push(temp[2].textContent.replace(/[\(\)]/g,'').split(/\s/g)[1]);" & _
" list_td.push(temp[3]?.querySelectorAll('p')[1]?.textContent.replace(/\n/g, '')?.split(/\s+/g)[0] || '-');" & _
" list_td.push(temp[4]?.querySelectorAll('p')[1]?.textContent.replace(/\n/g, '')?.split(/\s+/g)[0] || '-');" & _
" list_td.push(temp[5]?.querySelectorAll('p')[1]?.textContent.replace(/\n/g, '')?.split(/\s+/g)[0] || '-');" & _
" list_td.push(temp[6]?.querySelectorAll('p')[1]?.textContent.replace(/\n/g, '')?.split(/\s+/g)[0] || '-');" & _
" list_td.push(temp[7]?.querySelectorAll('p')[1]?.textContent.replace(/\n/g, '')?.split(/\s+/g)[0] || '-');" & _
" list_td.push(temp[8]?.querySelectorAll('p')[1]?.textContent.replace(/\n/g, '')?.split(/\s+/g)[0] || '-');" & _
" list_td.push(temp[9]?.textContent);" & _
" list_e.push(list_td.join(','));" & _
" }" & _
" });" & _
" return list_e.join('|||'); " & _
"}"
script_result = driver.ExecuteScript(script_content)
hourse_table = Split(script_result, "|||")
'Country of origin
' document.querySelector('table.race_table').querySelectorAll('tr')[2+1].querySelectorAll('td')[0-9]
For i = LBound(hourse_table) To UBound(hourse_table)
For j = LBound(hourse_table) To UBound(hourse_table)
Dim temp As Variant
temp = Split(hourse_table(j), ",")
Dim horse_id As String
If (InStr(startCell.Offset(row_offset + i, 37).value, temp(0)) > 0) Then
startCell.Offset(row_offset + i, 51 + 0).value = temp(1)
startCell.Offset(row_offset + i, 51 + 1).value = temp(2)
startCell.Offset(row_offset + i, 51 + 2).value = temp(3)
startCell.Offset(row_offset + i, 51 + 3).value = temp(4)
startCell.Offset(row_offset + i, 51 + 4).value = temp(5)
startCell.Offset(row_offset + i, 51 + 5).value = temp(6)
startCell.Offset(row_offset + i, 51 + 6).value = "'" & temp(7)
End If
Next j
Next i
Else
For j = 0 To horse_count - 1
' table not ready yet
startCell.Offset(row_offset + j, 30).value = "HKJC table not ready"
Next j
End If
GoTo Done
ErrorHandler:
MsgBox "hello error ?"
MsgBox "Error: " & Err.Description
Done:
Debug.Print "hello done"
End Function
' write cell
Sub writeCell(cell_addres As String, value As String)
End Sub
Private Sub Take_ScreenShot_Desktop()
Dim utils As New utils
Dim driver As New ChromeDriver
driver.Get "https://en.wikipedia.org/wiki/Main_Page"
Dim img As Object
'take a screenshot of the desktop
Set img = utils.TakeScreenshot()
'save the image in the folder of the workbook
img.SaveAs ThisWorkbook.Path & "\sc-desktop.png"
driver.Quit
End Sub