• 156

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

bioleon69 wrote:
有兩個東西擋住
token跟uri
不知道怎麼找出連結


938樓回答過了,方法同631樓
差別只在一個要放在header裡面,一個放在send參數


================================================================








'取得集保戶股權分散表(新版網頁),最新一筆資料
'連續(重新)下載、資料庫、除錯…等方法,請參考686樓
'TOKEN取得方式(說明),請參考631樓
'686樓舊版程式可正常使用,不需更新

Sub Get_TDCC_NEW_Web()


Dim HTMLsourcecode As Object, GetXml As Object, Url As String, url_a As String, temp() As String, ttt As Double
Dim StockNo As String, scaDate, SYNCHRONIZER_TOKEN As String, SYNCHRONIZER_URI As String

Set HTMLsourcecode = CreateObject("htmlfile")
Set GetXml = CreateObject("msxml2.xmlhttp")
ttt = Timer

Url = "https://www.tdcc.com.tw/portal/zh/smWeb/qryStock"

With GetXml
.Open "POST", Url, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Referer", Url
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
.send

HTMLsourcecode.body.innerhtml = .responsetext

SYNCHRONIZER_TOKEN = HTMLsourcecode.getElementById("SYNCHRONIZER_TOKEN").Value
SYNCHRONIZER_URI = HTMLsourcecode.getElementById("SYNCHRONIZER_URI").Value

'==================
StockNo = "2330"
'get all date
scaDate = Split(Trim(Split(Split(HTMLsourcecode.body.innertext, "資料日期")(1), "證券代號")(0)), " ")
Debug.Print UBound(scaDate), scaDate(0), scaDate(5), scaDate(10)
url_a = "SYNCHRONIZER_TOKEN=" & SYNCHRONIZER_TOKEN & "&SYNCHRONIZER_URI=" & SYNCHRONIZER_URI & "&method=submit&firDate=" & scaDate(0) & "&scaDate=" & scaDate(0) & "&sqlMethod=StockNo&stockNo=" & StockNo & "&stockName="
'==================


.Open "POST", Url, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Referer", Url
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
.send (url_a)

HTMLsourcecode.body.innerhtml = .responsetext
Set Table = HTMLsourcecode.all.tags("table")(1).Rows
ReDim temp(1 To Table.Length, 1 To Table(2).Cells.Length)

With Sheets("工作表1")

For i = 0 To Table.Length - 1
For j = 0 To Table(i).Cells.Length - 1
temp(i + 1, j + 1) = Table(i).Cells(j).innertext
Next j
Next i

.Cells.Clear
.Range("a1").Resize(UBound(temp(), 1), UBound(temp(), 2)) = temp()
.Columns.AutoFit

End With

End With

MsgBox "證券代號:" & Split(Split(HTMLsourcecode.body.innertext, "證券代號:")(1), "序")(0) & vbNewLine & Timer - ttt & "秒"

Set HTMLsourcecode = Nothing
Set GetXml = Nothing

End Sub




[點擊下載]
snare wrote:
938樓回答過了,方(恕刪)


感謝師傅
但小弟理解不太好,目前還是跟以前一樣硬套,我的理解是,以此網站為例
SYNCHRONIZER_TOKEN
SYNCHRONIZER_URI
先取出這兩個網頁端這兩筆變數亂碼,取出之後
再重新發送回去,但明明每一次連結都是隨機變數阿?連結第二次亂碼不是也會變?
目前就先硬套這個公式,走一步算一步了

至於631樓的又是另外一種處理方式,無法套用到此網站上


還好我要查的不需要用到sca_date,這個我想大家也跟我一樣看不懂
謝謝師傅熱心指導以及幫忙,祝您事事順心,萬事如意!
bioleon69 wrote:
至於631樓的又是另外一種處理方式,無法套用到此網站上


方法一樣,不代表程式碼要一樣

snare wrote:
剛剛試了一下,正常(ie11)
您用ie直接去開網址,不要透過vba,如果打不開,就是您ie設定上的問題
https://www.ctbcbank.com/twrbo/zh_tw/dep_index/dep_ratequery/dep_foreign_rates.html
回一下樓主906樓:
最近發現原本用IE抓的中信官網匯率已經失效。
看了一下VBA,發現在.Navigate Url時,IE開啟後就一片空白…
而我直接開IE再連到相同網址,還是一樣一片空白…
 
另外看了優率網的資料,中信的匯率更新還停在12/19!?
這是不是表示中信網頁已不支援IE了?
蔬食抗暖化,減碳救地球!
nijawang wrote:
這是不是表示中信網頁已不支援IE了?


可能在改版中,我也開不了
不只匯率網頁進不去,連中信金的官網也不行,再等等吧…
(測試時間20201225 12:33)
Snare大大你好,
我在你寫的gettwse(json).xlsm裡,想增加查詢量,在網頁看得到
{"msgArray":[{"tv":"7462","c":"t00","d":"20201225","ch":"t00.tw","tlong":"1608874260000","ip":"0","h":"14400.83","i":"tidx.tw","it":"t","l":"14296.97","n":"發行量加權股價指數","o":"14306.98","ex":"tse","t":"13:31:00","v":"212760","y":"14280.28","z":"14331.42"},{"tv":"0","c":"o00","d":"20201225","ch":"o00.tw","tlong":"1608874380000","ip":"0","h":"180.90","i":"oidx.tw","it":"t","l":"179.60","n":"櫃檯指數","o":"179.86","ex":"otc","t":"13:33:00","v":"52739","y":"179.69","z":"180.49"},{"tv":"-","c":"FRMSA","d":"20201225","ch":"FRMSA.tw","tlong":"1608874200000","ip":"0","h":"16440.34","i":"tidx.tw","it":"t","l":"16323.79","n":"寶島股價指數","o":"16335.79","ex":"tse","t":"13:30:00","y":"16306.66","z":"16366.35"}],"referer":"","userDelay":5000,"rtcode":"0000","queryTime":{"sysDate":"20201226","stockInfoItem":2472,"stockInfo":120205,"sessionStr":"UserSession","sysTime":"20:07:38","showChart":false,"sessionFromTime":-1,"sessionLatestTime":-1},"rtmessage":"OK","exKey":"if_tse_t00.tw|otc_o00.tw|tse_FRMSA.tw_zh-tw.null","cachedAlive":4073}
裡面有"v",用"temp.v"或"CallByName(temp, "v", VbGet)"都叫不出來,對不起我無法傳上我修改的檔案(權限不足),只能這樣描述,不知我哪裡弄錯,請你指正。謝謝你!

對不起, 試出來了,解決了。謝謝Snare大大的gettwse(json).xlsm!
goldchiou wrote:
裡面有"v",用"temp.v"或"CallByName(temp, "v", VbGet)"都叫不出來,對不起我無法傳上我修改的檔案(權限不足),只能這樣描述,不知我哪裡弄錯,請你指正。謝謝你!


219樓(2017-07-05)的舊範例,剛測試全部正常,沒您說的問題



Snare大大,已經可以了,謝謝你!
snare wrote:
可能在改版中,我也開不了
不只匯率網頁進不去,連中信金的官網也不行,再等等吧…
(測試時間20201225 12:33)
snare大,您好:
剛才我直接開IE已經可以開啟中信的匯率網頁。
(測試時間20201228 13:11)
但再試了一下之前的VBA,還是卡在.Navigate Url,只有白畫面…
請問有什麼debug的方法嗎?
另外是優率網目前把中國信託拿掉了…
 
謝謝!
 
== 更新 =========
下午再試,目前已正常!
蔬食抗暖化,減碳救地球!
請問snare大大
以下這個網址有辦法像200樓範例那種抓取方式嗎?
https://www.taifex.com.tw/cht/3/pcRatio
 
我用CHROME的開發人員模式,找不到像200樓那種下載網址
 
他的網頁有關的部分節錄如下:
--------------------------------------------------
>> 臺指選擇權(TXO)Put/Call Ratios 統計表
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
日期(起):
>> <input name="queryStartDate" type="text" id="queryStartDate" value='2020/11/29' />
>>
>>
日期(迄):
>> <input name="queryEndDate" type="text" id="queryEndDate" value="2020/12/29" />
>>
>>
>>

>>
>>
>>
>> <input type="button" name="button3" id="button4" value="查詢" onClick="Query1();" class="btn_gray">
>> <input type="button" value="下載" onClick="download1();" class="btn_gray">
>>
>>
>>
  • 156
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 156)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?