Attribute VB_Name = "FetchEtnet" Function run(stock_num As Integer) ' On Error GoTo eh Dim fetch_result(0 To 22) As String Dim driver As New ChromeDriver driver.SetBinary ChromiumBinaryPath driver.AddArgument "--disable-blink-features=AutomationControlled" driver.Start driver.ExecuteScript "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" driver.Get "https://www.etnet.com.hk/www/tc/stocks/realtime/quote.php" driver.ExecuteScript "document.querySelector('#quotesearch').value = '" & stock_num & "'" driver.ExecuteScript "document.querySelector('#quotesearch_submit').click()" 'driver.ExecuteScript "document.querySelectorAll('span.float_l')[6].click()" driver.FindElementByCss "#StkList", 30 ' 10_day_Moving_Average # 10???? fetch_result(IDX_10_DAY_MOVING_AVERAGE) = driver.ExecuteScript("{ return document.querySelector('#StkList').querySelectorAll('li.value')[1].textContent.trim() }") ' 20_day_Moving_Average # 20???? fetch_result(IDX_20_DAY_MOVING_AVERAGE) = driver.ExecuteScript("{ return document.querySelector('#StkList').querySelectorAll('li.value')[3].textContent.trim() }") ' 50_day_Moving_Average # 50???? fetch_result(IDX_50_DAY_MOVING_AVERAGE) = driver.ExecuteScript("{ return document.querySelector('#StkList').querySelectorAll('li.value')[5].textContent.trim() }") ' 100_day_Moving_Average # 100???? fetch_result(IDX_100_DAY_MOVING_AVERAGE) = driver.ExecuteScript("{ return document.querySelector('#StkList').querySelectorAll('li.value')[7].textContent.trim() }") ' 250_day_Moving_Average # 250???? fetch_result(IDX_250_DAY_MOVING_AVERAGE) = driver.ExecuteScript("{ return document.querySelector('#StkList').querySelectorAll('li.value')[9].textContent.trim() }") ' Earnings_per_Share # ?????? fetch_result(IDX_EARNINGS_PER_SHARE) = driver.ExecuteScript("{ return document.querySelector('#StkList').querySelectorAll('li.value')[26].textContent.trim() }") ' Application.Wait Now + TimeValue("00:00:5") run = fetch_result Done: ' Debug.Print "hello done" Exit Function eh: Debug.Print "hello error" End Function