- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
8#
發表於 2022-9-24 13:34
| 只看該作者
本帖最後由 singo1232001 於 2022-9-24 13:37 編輯
Sub 分解步驟版()
Cells.ClearContents
Set driver = CreateObject("Selenium.ChromeDriver")
driver.AddArgument ("headless") '無頭視窗
driver.Wait 1500
driver.get "https://mis.twse.com.tw/stock/group.jsp?type=fixed&ex=tse&ind=TIDX#STATISTICS"
Set tbl6 = driver.findelementsbytag("table")(6)
Set tby1 = tbl6.findelementsbytag("tbody")(1)
Set tr2 = tby1.findelementsbytag("tr")(2)
Set td2 = tr2.findelementsbytag("td")(3)
Cells(1, 1) = td2.Text
End Sub
Sub 一氣呵成版()
Cells.ClearContents
Set driver = CreateObject("Selenium.ChromeDriver")
driver.AddArgument ("headless") '無頭視窗
driver.Wait 1500
driver.get "https://mis.twse.com.tw/stock/group.jsp?type=fixed&ex=tse&ind=TIDX#STATISTICS"
Cells(1, 1) = driver.findelementsbytag("table")(6). _
findelementsbytag("tbody")(1). _
findelementsbytag("tr")(2). _
findelementsbytag("td")(3). _
Text
End Sub
'兩種寫法都一樣
'如果要加上完全自動更新
Sub Chrome更新時自動更新_and_分解步驟版()
Do
On Error GoTo 0
On Error Resume Next
Set driver = CreateObject("Selenium.ChromeDriver")
driver.AddArgument ("headless")
Err = 0
driver.Start
If Err <> 0 Then
If Exit5 > 5 Then Exit Sub '若執行超過5次就不跑了
driver.Quit
Set driver = Nothing
Exit5 = Exit5 + 1
Call updataSelenium
End If
Loop Until Err = 0
Set driver = Nothing
Cells.ClearContents
Set driver = CreateObject("Selenium.ChromeDriver")
driver.AddArgument ("headless") '無頭視窗
driver.Wait 1500
driver.get "https://mis.twse.com.tw/stock/group.jsp?type=fixed&ex=tse&ind=TIDX#STATISTICS"
Cells(1, 1) = driver.findelementsbytag("table")(6). _
findelementsbytag("tbody")(1). _
findelementsbytag("tr")(2). _
findelementsbytag("td")(3). _
Text
End Sub
Sub updataSelenium() '如果中途就跳離 可能是檔案位置要重新確認 或者 舊版本檔案沒刪除導致程序無法執行 也可能是壓縮檔解壓過程出問題 也可能是下載檔案出問題 主要F8逐步看哪段跳離
'找到chromedriver的檔案位置 有的電腦位置不同 通常是這兩個位置其一
'確認chromedriver正確的檔案路徑 與正確的資料夾路徑
path1 = "C:\Users\" & Environ$("username") & "\AppData\Local\SeleniumBasic\Chromedriver.exe"
path2 = "C:\Program Files\SeleniumBasic\chromedriver.exe"
If Dir(path1) <> "" Then TempDrvFile = path1
If Dir(path2) <> "" Then TempDrvFile = path2
foler = Left(TempDrvFile, InStrRev(TempDrvFile, "\"))
'查找電腦當前的google版本號
Set objHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") 'Get chrome version
chrversion = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon\version")
dotsarr = Split(chrversion, ".")
leftchrver = dotsarr(0) & dotsarr(1)
'查找電腦當前的chromeDriver版本號
Set oShell = CreateObject("wscript.shell")
errcode = oShell.Exec(TempDrvFile & " --version").StdOut.ReadAll
verarr = Split(errcode, " ")
chrdrv = verarr(1)
dotsarr2 = Split(chrdrv, ".")
leftchrdrv = dotsarr2(0) & dotsarr2(1)
If leftchrver = leftchrdrv Then Exit Sub
'若不符 ,則上官網查最新chromeDriver版本號
Url = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_" & dotsarr(0)
Call objHttp.Open("GET", Url, False)
Call objHttp.Send("")
version_number = objHttp.responseText
dotsarr3 = Split(version_number, ".")
leftversion_no = dotsarr3(0) & dotsarr3(1)
download_url = "https://chromedriver.storage.googleapis.com/" + version_number + "/chromedriver_win32.zip"
'利用最新的chromeDriver版本號 找到下載路徑
Call objHttp.Open("GET", download_url, False)
Call objHttp.Send("")
'下載檔案,並更正成壓縮檔副檔名
Set fileStream = CreateObject("ADODB.Stream")
With fileStream
.Open
.Type = 1 'adTypeBinary
.Write objHttp.responseBody
.Position = 0
.SaveToFile foler & "chromedriver.zip", 2
.Close
End With
'解壓縮(解壓前程序會先刪掉舊的)
On Error GoTo 0
Set oApp = CreateObject("Shell.Application")
If Dir(TempDrvFile) <> "" Then Kill TempDrvFile
oApp.Namespace(foler).CopyHere _
oApp.Namespace(foler & "chromedriver.zip").items
End Sub |
|