## 第一段 : 創一個虛擬網路,模擬我們手動執行
基本上想做到按鍵觸發、鍵盤輸入都需要用到selenium這套件,那我模擬的環境是用chrome,所以執行這段會跑出一個乾淨的網頁。
## 第二段 : 創一個虛擬網路,模擬我們手動執行
這裡就是使用者輸入想要找的年度和公司代碼,所以看不懂程式碼的你只要改這裡的值就好,其他程式碼你一律直接執行到最後就好了。
url字串可以發現?後面是分別加入我們輸入的值,利用這些參數就可以到查詢的結果,無須手動方式輸入,這叫url request的方式呼叫。
參數分別有
* step = 1
以市場別/產業別查詢代號
* colorchg=1
背景變白色
* co_id={number} -> 這寫法是python獨特寫法的
公司代號
* year={year}
年度
* mtype=F
資料類型
Q : 我怎知道參數的名稱?
A : 你可以到網站按F12,看看你手動輸入的格子他的name是什麼。例如mtype
## 第三段 : 取得”股東會年報”,點pdf
* 執行結果:
link = javascript:readfile2(“F”,”2330",”2018_2330_20190605F04.pdf”);
pdf_name = 2018_2330_20190605F04.pdflink 是 從這網站找到”F04" 且 “.pdf” 的<a href的文字 。(xpath:[詳細內容])
<a href=”javascript:readfile2("F","2330","2018_2330_20190605F04.pdf");”>2018_2330_20190605F04.pdf</a>
之後找到link取得pdf_name,找到點擊下去,如下。
你會發現它新增了一個分頁~~
## 第四段 : 切換瀏覽器分頁
可以發現目前的模擬瀏覽器停留在新的分頁。
之所以要time.sleep是要評估開啟瀏覽器需要幾秒,沒設sleep的話可能會跟不上程式的速度而產生錯誤,這點需要特別注意。
## 第五段 : 切換瀏覽器分頁
* 執行結果:
`’https://doc.twse.com.tw/pdf/2018_2330_20190605F04_20201228_142438.pdf'`
ActionChains 是模擬滑鼠點擊,點擊.pdf的連結,切到最新頁面。
由結果知道原來這個pdf檔案是在這個url,也可以發現說他最後一串url的數字是隨機的,並且還具有時效性。
然後取完url後,再把虛擬網頁關掉。
## 第六段 : 自動下載
根據上一段可以知道我們還需要做點擊才能夠下載,那我這方法是希望能夠不用點擊即可下載,原因是下載圖示是抓不到的資訊,所以需要用其他方法完成他。
Options來設定:
1. default_directiory: ‘./’ 預設下載地址
2. prompt_for_download: False 定義下載不彈窗
3. directory_upgrade”: True 得到default_directiory位置
4. always_open_pdf_externally :True 打開pdf
之後.get(url)就可以根據你設定的參數達成無點擊下載了。
就這樣可以把熱騰騰的資料在短短幾秒抓下來咯~~
ㄙㄨㄚˋ