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

304 lines
12 KiB
QBasic

Attribute VB_Name = "Racecard_aspx"
Option Explicit
Public Sub ScrapeRacecard()
Common.ResetSheet
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 i, j, k, l, m As Integer
Dim not_used As String
Dim CURRENT_DIR As String
CURRENT_DIR = ThisWorkbook.Path
' Create a new instance of the WebDriver.
Dim driver As New WebDriver
' Set the path to the WebDriver executable.
driver.SetBinary CURRENT_DIR & "\Chromium\Application\chrome.exe"
driver.AddArgument "--disable-blink-features=AutomationControlled --blink-settings=imagesEnabled=false"
' Start Chrome.
driver.Start "chrome"
' not_used = Common.WriteCell(s"A3","helloworld")
Dim startCell As Range
Set startCell = Worksheets("Sheet1").Range("A3")
Dim row_offset, row_offset_start As Integer
row_offset = 0
row_offset_start = 0
Dim driver1 As New WebDriver
driver1.SetBinary CURRENT_DIR & "\Chromium\Application\chrome.exe"
driver1.AddArgument "--disable-blink-features=AutomationControlled --blink-settings=imagesEnabled=false"
driver1.Start "chrome"
driver.Get "https://racing.hkjc.com/racing/information/English/Racing/Racecard.aspx"
Dim race_links_scraped, race_links As Variant
race_links_scraped = driver.ExecuteScript( _
"let links = [];" & _
"document" & _
" .querySelectorAll('.top_races')[0]" & _
" .querySelectorAll('a')" & _
" .forEach((e) => links.push(e.href));" & _
"first_race_link = links[0].replace('RaceNo=2', 'RaceNo=1');" & _
"links = [first_race_link, ...links];" & _
"return links.join('||');" _
)
race_links = Split(race_links_scraped, "||")
Dim first_race_link, last_race_link As String
first_race_link = race_links(0)
last_race_link = race_links(UBound(race_links))
Dim s_date, s_loc, s_race_num As String
Dim i_num As Integer
s_date = CStr(getDateFrRaceCardLink(first_race_link)(0))
s_loc = CStr(getDateFrRaceCardLink(first_race_link)(1))
s_race_num = CStr(getDateFrRaceCardLink(last_race_link)(2))
i_num = CInt(s_race_num)
Dim race_link as Variant
' on error goto eh
On Error GoTo ErrorHandler
For Each race_link In race_links
' For m = 1 To i_num 'i_num
' Navigate to a website.
' driver.Get "https://racing.hkjc.com/racing/information/Chinese/Racing/Racecard.aspx?RaceDate=" & s_date & "&Racecourse=" & s_loc & "&RaceNo=" & CStr(m)
Dim chinese_race_link as String
chinese_race_link = replace(race_link, "English","Chinese")
driver.Get chinese_race_link
driver.FindElementsByTag ("td")
' document.querySelectorAll('#racecardlist tbody tr')[2].textContent
Dim race_summary_content, race_summary_result As String
' document.querySelectorAll('.raceCard div')[6].textContent.split(',').map(l => l.replace(/\n/g,'').trim()).filter(l => l.trim() != '')
race_summary_content = "{ return document.querySelectorAll('.raceCard div')[8]?.innerHTML.replace(/<br>/g,', ').split(', ').join('|||') }"
race_summary_result = driver.ExecuteScript(race_summary_content)
Dim course_name As String
Dim course_length As String
Dim course_class As String
Dim course_condition As String
Dim mark_range As String
course_name = driver.ExecuteScript("{return document.querySelectorAll('.raceCard div')[8]?.innerHTML.split(/<br>/g)[2].split(', ').reverse().slice(2).join(' ')}")
course_length = driver.ExecuteScript("{return document.querySelectorAll('.raceCard div')[8]?.innerHTML.split(/<br>/g)[2].split(', ').reverse()[1]}")
course_class = driver.ExecuteScript("{return document.querySelectorAll('.raceCard div')[8]?.innerHTML.split(/<br>/g)[3].split(', ').reverse()[0] }")
course_condition = driver.ExecuteScript("{return document.querySelectorAll('.raceCard div')[8]?.innerHTML.split(/<br>/g)[2].split(', ').reverse()[0] }")
mark_range = driver.ExecuteScript("{return document.querySelectorAll('.raceCard div')[8]?.innerHTML.split(/<br>/g)[3].split(', ').reverse()[1].split(': ')[1] }")
row_offset_start = row_offset
Dim actual_horse_count As Integer
actual_horse_count = 0
For j = 0 To 30
Dim s_test, s_test_result As String
s_test = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 1 & "]?.textContent.trim()||'not found' }"
s_test_result = driver.ExecuteScript(s_test)
If (s_test_result = "not found") Then
Else
actual_horse_count = actual_horse_count + 1
Dim horse_id As String
Dim s_content, s_result As String
'1 ???? --> Horse No.
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 1 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 1).value = s_result
'2 6??? --> Last 6 Runs
'3 ?? --> Colour
'4 ?? --> Horse
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 4 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 2).value = s_result
horse_id = driver.ExecuteScript("{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 4 & "].querySelector('a').href.split('=')[1] }")
startCell.Offset(row_offset, 400).value = horse_id
'5 ?? --> Brand No.
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 5 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 0).value = s_result
'6 ?? --> Wt.
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 6 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 7).value = s_result
'7 ?? --> Jockey
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 7 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 3).value = s_result
'8 ???? --> Over Wt.
'9 ?? --> Draw
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 9 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 5).value = s_result
'10 ??? --> Trainer
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 10 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 4).value = s_result
'11 ?? --> Rtg.
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 12 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 8).value = s_result
'12 ??+/- --> Rtg.+/-
'13 ???? --> Horse Wt. (Declaration)
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 13 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 9).value = s_result
'14 ????+/- --> Wt.+/- (vs Declaration)
'15 ???? --> Best Time
'16 ?? --> Age
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 17 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 6).value = s_result
'17 ???? --> WFA
'18 ?? --> Sex
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 19 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 10).value = s_result
'19 ???? --> Season Stakes
'20 ?????? --> Priority
'21 ?????? --> Days since Last Run
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 22 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 12).value = s_result
'22 ?? --> Gear
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 23 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 11).value = s_result
'23 ?? --> Owner
'24 ?? --> Sire
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 25 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 13).value = s_result
'25 ?? --> Dam
s_content = "{ return document.querySelectorAll('#racecardlist tbody tr td')[" & (27) + j * 27 + 26 & "].textContent.trim() }"
s_result = driver.ExecuteScript(s_content)
startCell.Offset(row_offset, 14).value = s_result
'26 ???? --> Import Cat.
startCell.Offset(row_offset, 15).value = Split(race_summary_result, "|||")(1)
startCell.Offset(row_offset, 16).value = Split(race_summary_result, "|||")(3)
startCell.Offset(row_offset, 17).value = course_length
startCell.Offset(row_offset, 18).value = course_name
startCell.Offset(row_offset, 19).value = course_class
startCell.Offset(row_offset, 20).value = course_condition
startCell.Offset(row_offset, 21).value = mark_range
startCell.Offset(row_offset, 22).value = Split(Split(Split(race_summary_result, "|||")(0), " - ")(0), " ")(2)
not_used = Horse_aspx.ScrapeHorse(driver1, startCell.Offset(row_offset, 400).value, CStr(row_offset))
not_used = TrackworkResult_aspx.Scrape(driver1, startCell.Offset(row_offset, 400).value, row_offset, s_date)
row_offset = row_offset + 1
End If
Next j
'not_used = LocalResults_aspx.ScrapeLocalResults(driver1, s_date, CStr(m), row_offset_start, actual_horse_count)
'not_used = DisplaySectionalTime_aspx.ScrapeDisplaySectionalTime(driver1, s_date, CStr(m), row_offset_start, actual_horse_count)
' Next m
Next race_link
GoTo Done
ErrorHandler:
MsgBox "Error: " & Err.Description
Done:
driver.Quit
driver1.Quit
Common.ResumeScreenUpdate
Common.TidySheet
End Sub
' 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