現在就來慢慢介紹給各位了解如何透過 Mozilla Fire Fox 找出 證交所買賣日報表查詢系統 的日報表檔案下載位置,這裡不做程式如何撰寫的介紹,僅以操作技巧介紹流程。
事前準備工作:請各位先生、小姐、客官們先安裝以下軟體與確保附加元件安裝完成
1. Mozilla Fire Fox瀏覽器。
2. Fire Fox附加元件 - Cookies Manager+。
3. Fire Fox附加元件 - HackBar。
4. 在 Mozilla Fire Fox瀏覽器上方空白處按右鍵,點選「選單列」中的「工具」,確認附加元件安裝完成。
我們先以正常人行為模式介紹,證交所買賣日報表查詢系統 對瀏覽器做了什麼事,後面再以非正常人行為模式一步步拆解。
登入證交所買賣日報表查詢系統,開啟 FireFox「檢測元素」、Cookies Manager+ ,並輸入查詢 2330台積電,注意要連同識別碼一起輸入,來觀察瀏覽器的變化。
在未登入 證交所買賣日報表查詢系統 前,請先確定 Cookies Manager+ 的內容是空白乾淨,這樣才能清楚看到中間的變化。
登入 證交所買賣日報表查詢系統 後,會見到 Cookies Manager+ 多了一筆Cookie資料。
Cookie:「ASP.NET_SessionId-bl2vsifhfjtvo20varvuycaj」,請注意該Cookie (重要、重要、重要、重要、重要,我都講5次了,可見有多重要)。
輸入股票代碼、識別碼後查看 FireFox「檢測元素」內容的變化。
在證交所買賣日報表查詢系統網頁,左側深色畫面的原始程式碼,內容就只有兩個網頁連結。
請注意下兩張圖中紅色框框內容。
http://bsr.twse.com.tw/bshtm/bsMenu.aspx 的內容。
http://bsr.twse.com.tw/bshtm/bsContent.aspx?v=t 的內容。
冰雪聰明的各位,是否有發現到圈起來紅色框框內容都有帶入Cookie:「ASP.NET_SessionId-bl2vsifhfjtvo20varvuycaj」,簡單說,未來要抓取該網站資料,如果沒有帶入Cookie,網站是不會讓你查詢資料,這就是為什麼筆者講了5次重要的原因。
PS:這裡請注意一個重點,當你查詢到資料後,如果停留太久之後才去點選下載CSV時,網站將不會讓你下載,也就是說這樣的畫面是有時效性,如果錯過了就要重頭再來。
那至於上面的兩個連結,一個是查尋的頁面,一個是資料呈現與下載的頁面。
查尋的頁面。
資料呈現的頁面。
至於資料下載的頁面,就是將 http://bsr.twse.com.tw/bshtm/bsContent.aspx?v=t 後面接的 "?v=t" 參數移除就行了。
以上就是正常人行為模式,介紹到這裡大家進度應該都有跟上,如果跟不上就趕快發問,或加筆者Line了解,接下來開始介紹非正常人行為模式。
這裡使用Chrome的「檢查元素」觀察在POST時,參數傳送的變化。
實際POST傳送參數的內容(View source)。
點選網頁左邊的深色的空白處,查看原始程式碼,會見到有兩段程式碼,與上述POST傳送的參數內容是相同。
第一段內容
__VIEWSTATE=/wEPDwUJOTAxMjkxMjg3D2QWAgIDD2QWBAIBD2QWAmYPZBYEZg9kFgJmDxAPFgYeB0NoZWNrZWRnHglGb3JlQ29sb3IKAB4EXyFTQgIEZGRkZAIBD2QWAgIBDw8WBB8BCgAfAgIEZGQCAw9kFgQCAw8PFgIeBFRleHRlZGQCCQ8PFgIeB1Zpc2libGVoZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFElJhZGlvQnV0dG9uX05vcm1hbAUQUmFkaW9CdXR0b25fRXhjZAUQUmFkaW9CdXR0b25fRXhjZAUPQ2FwdGNoYUNvbnRyb2wxDwUkZDg5YzQyMmEtYjIxNC00YzU4LWIwYzYtNjk3NzdiNjYyNjQ1ZJQ0CEzjhZPnGlDi2S6vIu8=第二段內容
__EVENTVALIDATION:/wEdAAaUfTH73HQyey4UaNEABS4lfMmuxAJNAJcNkRRsVeJwwqKURZav/+YrVMqaWE2hvMxJwK4Ohf3nRgXHkFhQen1PRSciNdPYWmINCrip1wqw01PJCA0uL9aE2sjICZqv6GpBlB2Bcbi1NPbCNN4mfR8G這兩段內容分別可以在bsMenu.aspx原始程式碼找到對應的位址,只不過實際傳送給後臺伺服器的內容並不是如此,而是經過編碼(View parsed)。
POST在傳送時會將參數經過URL編碼後再送給後台進行處理,基於此各位可以試著編碼過後的參數,拿到網路上有URL解碼的網站去解碼 URL Decoder/Encoder,再比對跟上述兩段的內容,即可了解筆者所要表達的意思。
第一段URL編碼的內容
__VIEWSTATE=%2FwEPDwUJOTAxMjkxMjg3D2QWAgIDD2QWBAIBD2QWAmYPZBYEZg9kFgJmDxAPFgYeB0NoZWNrZWRnHglGb3JlQ29sb3IKAB4EXyFTQgIEZGRkZAIBD2QWAgIBDw8WBB8BCgAfAgIEZGQCAw9kFgQCAw8PFgIeBFRleHRlZGQCCQ8PFgIeB1Zpc2libGVoZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFElJhZGlvQnV0dG9uX05vcm1hbAUQUmFkaW9CdXR0b25fRXhjZAUQUmFkaW9CdXR0b25fRXhjZAUPQ2FwdGNoYUNvbnRyb2wxDwUkZDg5YzQyMmEtYjIxNC00YzU4LWIwYzYtNjk3NzdiNjYyNjQ1ZJQ0CEzjhZPnGlDi2S6vIu8%3D第二段URL編碼的內容
__EVENTVALIDATION=%2FwEdAAaUfTH73HQyey4UaNEABS4lfMmuxAJNAJcNkRRsVeJwwqKURZav%2F%2BYrVMqaWE2hvMxJwK4Ohf3nRgXHkFhQen1PRSciNdPYWmINCrip1wqw01PJCA0uL9aE2sjICZqv6GpBlB2Bcbi1NPbCNN4mfR8G
了解了要傳送給後台的參數後,回到FireFox瀏覽器上,開啟 HackBar,來進行手動參數設定,筆者幫各位整理出以下要使用變數內容。
請注意有4個變數內容需要修改,分別是 __VIEWSTATE (查看原始程式碼內容,並做URL編碼)、__EVENTVALIDATION (查看原始程式碼內容,並做URL編碼)、TextBox_Stkno (指定欲查詢的股票代碼)、CaptchaControl1 (當前網頁的識別碼圖形中的識別碼)。
__EVENTTARGET= &__EVENTARGUMENT= &__LASTFOCUS= &__VIEWSTATE=%2FwEPDwUJOTAxMjkxMjg3D2QWAgIDD2QWBAIBD2QWAmYPZBYEZg9kFgJmDxAPFgYeB0NoZWNrZWRnHglGb3JlQ29sb3IKAB4EXyFTQgIEZGRkZAIBD2QWAgIBDw8WBB8BCgAfAgIEZGQCAw9kFgQCAw8PFgIeBFRleHRlZGQCCQ8PFgIeB1Zpc2libGVoZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFElJhZGlvQnV0dG9uX05vcm1hbAUQUmFkaW9CdXR0b25fRXhjZAUQUmFkaW9CdXR0b25fRXhjZAUPQ2FwdGNoYUNvbnRyb2wxDwUkZDg5YzQyMmEtYjIxNC00YzU4LWIwYzYtNjk3NzdiNjYyNjQ1ZJQ0CEzjhZPnGlDi2S6vIu8%3D &__EVENTVALIDATION=%2FwEdAAaUfTH73HQyey4UaNEABS4lfMmuxAJNAJcNkRRsVeJwwqKURZav%2F%2BYrVMqaWE2hvMxJwK4Ohf3nRgXHkFhQen1PRSciNdPYWmINCrip1wqw01PJCA0uL9aE2sjICZqv6GpBlB2Bcbi1NPbCNN4mfR8G &RadioButton_Normal=RadioButton_Normal &TextBox_Stkno=2330 &CaptchaControl1=RQUE4 &btnOK=%E6%9F%A5%E8%A9%A2
現在就帶大家使用FireFox瀏覽器搭配 HackBar 一步步介紹給大家了解,如何手動設定,並傳送參數給後台。
Step 1. 使用FireFox開啟連結 http://bsr.twse.com.tw/bshtm/bsMenu.aspx 。
Step 2. 查看網頁下半身色區塊的原始程式碼,並找出__VIEWSTATE、__EVENTVALIDATION的對應值,到 URL Decoder/Encoder 網頁上去編碼。
URL Decoder/Encoder
__VIEWSTATE
%2FwEPDwUJOTAxMjkxMjg3D2QWAgIDD2QWBAIBD2QWAmYPZBYEZg9kFgJmDxAPFgYeB0NoZWNrZWRnHglGb3JlQ29sb3IKAB4EXyFTQgIEZGRkZAIBD2QWAgIBDw8WBB8BCgAfAgIEZGQCAw9kFgQCAw8PFgIeBFRleHRlZGQCCQ8PFgIeB1Zpc2libGVoZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFElJhZGlvQnV0dG9uX05vcm1hbAUQUmFkaW9CdXR0b25fRXhjZAUQUmFkaW9CdXR0b25fRXhjZAUPQ2FwdGNoYUNvbnRyb2wxDwUkOWMyYjYyOWQtMDgyNC00YTRjLWFmNzctNTZmMTg1YWYxZWNmZG299hEhBw0JMunN7KclbGY%3D__EVENTVALIDATION
%2FwEdAAZBOxeKxB2MWCqIdygBFcCjfMmuxAJNAJcNkRRsVeJwwqKURZav%2F%2BYrVMqaWE2hvMxJwK4Ohf3nRgXHkFhQen1PRSciNdPYWmINCrip1wqw01PJCA0uL9aE2sjICZqv6GptBPefDWIwtv6p57V01fAc最後填入上面的變數中,請記得指定欲查詢的股票代碼以及網頁上的識別碼。
__EVENTTARGET= &__EVENTARGUMENT= &__LASTFOCUS= &__VIEWSTATE=%2FwEPDwUJOTAxMjkxMjg3D2QWAgIDD2QWBAIBD2QWAmYPZBYEZg9kFgJmDxAPFgYeB0NoZWNrZWRnHglGb3JlQ29sb3IKAB4EXyFTQgIEZGRkZAIBD2QWAgIBDw8WBB8BCgAfAgIEZGQCAw9kFgQCAw8PFgIeBFRleHRlZGQCCQ8PFgIeB1Zpc2libGVoZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFElJhZGlvQnV0dG9uX05vcm1hbAUQUmFkaW9CdXR0b25fRXhjZAUQUmFkaW9CdXR0b25fRXhjZAUPQ2FwdGNoYUNvbnRyb2wxDwUkOWMyYjYyOWQtMDgyNC00YTRjLWFmNzctNTZmMTg1YWYxZWNmZG299hEhBw0JMunN7KclbGY%3D &__EVENTVALIDATION=%2FwEdAAZBOxeKxB2MWCqIdygBFcCjfMmuxAJNAJcNkRRsVeJwwqKURZav%2F%2BYrVMqaWE2hvMxJwK4Ohf3nRgXHkFhQen1PRSciNdPYWmINCrip1wqw01PJCA0uL9aE2sjICZqv6GptBPefDWIwtv6p57V01fAc &RadioButton_Normal=RadioButton_Normal &TextBox_Stkno=2330 &CaptchaControl1=48VLK &btnOK=%E6%9F%A5%E8%A9%A2
當傳送參數設定正確後,]按下 HackBar 上的Execute(X)按鈕,進行POST傳送,正常執行結果會顯示股票代碼的CSV下載點。
不正常執行結果,會出現 "驗證碼已逾期" 的字樣。
有執行成功後,欲下載指定股票代碼檔案CSV,可直接點選網頁上的連結,或是在網址列上輸入以下網址,即可查看或下載指定內容。
查看資料的URL:http://bsr.twse.com.tw/bshtm/bsContent.aspx?v=t
下載資料的URL:http://bsr.twse.com.tw/bshtm/bsContent.aspx
到此已經介紹完如何透過FireFox的附加元件 HackBar,做手動參數設定與POST傳送,如果還有不清楚的地方,請用Line與筆者聯繫瞭解。
注意事項:
1. 使用FireFox的附加元件 HackBar 傳送資料時,請先確認Cookie內容是否已存在,證交所送進來的Cookie。
2. 手動設定變數與POST傳送,同一Cookie可重複使用。
3. 手動設定變數,":"與"="、兩傳送變數需要"&"連結,以上記得要填正確,不然結果會出現不正常執行的回報畫面。
4. 驗證碼有時效限制,要特別注意。
5. 買賣日報表系統太頻繁抓取資料或是F5連續多按幾次,就會發生網頁錯誤無法正常顯示,我們稱為假死狀態,等個5~7秒後再執行即可。
6. 使用程式抓取檔案,要注意Cookie的使用。
7. 最後一個事項恕無法告知。
最後感謝由「iInfo程式與投資應用」群裡兩位工程朋友幫忙使用VC++、Python的執行結果。
使用VC++的清權大大,程式執行有使用Retry機制 + 每次抓取新的Cookie。
使用Python的ark大大,程式執行有使用Retry機制 + 使用同一個Cookie。