• 156

(不定期更新)使用VBA解決 excel web 查詢無法匯入、匯入太慢的股市資料

bank87012 wrote:
請問上櫃個股月成交資訊
https://www.tpex.org.tw/web/stock/statistics/monthly/st44.php?l=zh-tw
from data:ajax=true&l=zh-tw&yy=2024&input_stock_code=1240
如何找出正確網址


一、各種瀏覽器的開發者工具(F12)
二、大家常用的 fiddler










(點我看大圖)

snare wrote:
上保護了,看準xmlhttp...(恕刪)


大師 您好:
我的Chrome版本是128.0.6613.85,但是ChromeDriver的版本卻是128.0.6613.84。我嘗試#1442, #1444和#1448的程式碼,三組程式碼的 chrome.Get Url 都遇到 "Automation錯誤"的問題,不知是否因為Chrome和ChromeDriver的版本匹配的問題?請解惑,謝謝您。
Morten Hsu wrote:
不知是否因為Chrome和ChromeDriver的版本匹配的問題


前面幾個數字一樣就行,後面的差一點沒關係
版本不對出現的是這樣的訊息






在chrome.get那行就出錯,代表chromedriver不正常,跟後面的程式碼無關
試著從重新下載安裝,vba記得要設定引用項目

一、先到這下載SeleniumBasic-2.0.9.0.exe,安裝
https://github.com/florentbr/SeleniumBasic/releases/tag/v2.0.9.0

二、再到這下載適合您電腦內chrome版本的更新,把新的 chromedriver.exe 直接取代舊的就行
https://getwebdriver.com/chromedriver#stable




裝好後用最簡單的開網頁,測試看看還會不會出錯

Sub test()

Dim chrome As New Selenium.ChromeDriver

chrome.Get "https://tw.yahoo.com"
chrome.Wait 5000

Stop

chrome.Quit
Set chrome = Nothing

End Sub


Morten Hsu

謝謝大師,我依指示再試試。

2024-08-29 12:25
S大您好

請問一下要加入甚麼語法或者是哪邊的設定要改才能讓chrome 保持登入的狀況呢?
因為用vba跑的時候 會是顯示沒有登入的情況
感謝



用chrome瀏覽器打開goodinfo 是有顯示登入狀況沒錯







Sub test()

Dim chrome As New Selenium.ChromeDriver, UrL As String, i As Integer, test(1 To 2) As String

test(1) = "https://reurl.cc/2LmpVn"
test(2) = "https://reurl.cc/p6MLGe"


For i = 1 To 2

UrL = test(i)

chrome.Get UrL
'chrome.Window.Maximize

chrome.Wait 5000

Sheets(i).Cells.Clear

chrome.FindElementsByXPath("/html/body/table[2]/tbody/tr/td[3]/div[3]/div/div/table")(1).AsTable.ToExcel Sheets(i).Range("a1")

Next i



'debug
Stop

chrome.Quit
Set chrome = Nothing

End Sub
ifye wrote:
請問一下要加入甚麼語法或者是哪邊的設定要改才能讓chrome 保持登入的狀況呢?







Sub test()

Dim chrome As New Selenium.ChromeDriver

chrome.SetProfile "%USERPROFILE%\AppData\Local\Google\Chrome\User Data", True
chrome.Get "https://reurl.cc/2LmpVn"
chrome.Wait 5000

stop

chrome.Quit
Set chrome = Nothing

End Sub

snare wrote:
上保護了,看準xmlhttp...(恕刪)

Snare大師 您好:
本來要請教#1442的問題,結果留言跑到#1441,抱歉!
chrome.Get Url的錯誤是SeleniumBasic底下的ChromeDriver.exe版本太舊,更新後已經可以調用Chrome顯示自動化測試頁面,但是在執行 'chrome.FindElementByXPath' 時遇到 'NoSuchElementError' 的錯誤。請問ChromeDriver.exe的安裝路徑需要在使用者環境變數中設定嗎?例如 C:\Users\使用者名稱\AppData\Local\SeleniumBasic。謝謝您!
Morten Hsu wrote:
請問ChromeDriver.exe的安裝路徑需要在使用者環境變數中設定嗎?例如 C:\Users\使用者名稱\AppData\Local\SeleniumBasic。謝謝您!


SeleniumBasic自動安裝的不用,直接下載改放其它位置的才需要
詳情請google ChromeDriver.exe 安裝

Morten Hsu wrote:
但是在執行 'chrome.FindElementByXPath' 時遇到 'NoSuchElementError' 的錯誤。


停在 .get 網址 那行 ,不是網址錯,就是 chromedriver.exe沒裝好
vba 把 chrome 瀏覽器打開後,就是程式設計上的問題了


NoSuchElementError,因為網頁改版Xpath有變,所以程式出錯
請自行和1442樓比較看看有何不同


snare wrote:
SeleniumBasic自動安裝的不用,直接下載改放其它位置的才需要


其實ChatGPT也給了我很多建議,到頭來還是不頂用,感謝Snare大師,您的答覆都是直指問題核心,我會仔細研究一下,有問題再請教。謝謝!
snare wrote:
既然 finance...(恕刪)

請問為什麼這個失效了
變成要登入?
Morten Hsu wrote:
其實ChatGPT也...(恕刪)

Snare大師 您好:
#1477的程式代碼已經可以下載歷年平均績效和獲利指標,因為已定義test(1 To 2) As String,而且test(1) = "2330"和test(2) = "2412",但是,test(2)的中華電資料沒有寫入工作表2,而是把工作表1的資料覆蓋掉。Sheets(i).Cells.Clear 發生執行階段錯誤'9': 陣列索引超出範圍,我不知道問題出在哪裡,敬請指教。
另外, chrome.FindElementByXPath("/html/body/table[2]/tbody/tr[2]/td[3]/div[2]/table/tbody/tr/td/table/tbody/tr/td[3]/nobr/select/option[3]").Click 的XPath是怎麼決定的?
還一個問題是XPath的正確取得,如果以經營績效的網址https://goodinfo.tw/tw/StockBzPerformance.asp?STOCK_ID=2330為例,我按照#1448的方法找到的XPath如下:
成交資訊與最新消息
Copy full XPath:/html/body/table[2]/tbody/tr[2]/td[3]/table[1]
股利分派統計 (最近10年平均)
Copy full XPath:/html/body/table[2]/tbody/tr[2]/td[3]/main/div[2]/section
歷年平均績效 (合併報表)
Copy full XPath:/html/body/table[2]/tbody/tr[2]/td[3]/div[2]
以上這些都跟您使用的XPath:
chrome.FindElementsByXPath("/html/body/table[2]/tbody/tr[2]/td[3]/div[2]/div/div/table")(1).AsTable.ToExcel Sheets(1).Range("a1")
chrome.FindElementsByXPath("/html/body/table[2]/tbody/tr[2]/td[3]/section/div/div/table[1]")(1).AsTable.ToExcel Sheets(1).Range("a15")
不太一樣,請問還有甚麼關鍵電要注意?很抱歉,功力不足,好像問了不是問題的問題,尚請海涵。
  • 156
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 156)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?