[爬蟲] 初篇-使用 python (selenium) + Line Notify 做出一個電費自動查詢功能

Gary
Oct 3, 2021

我知道台電本身有網站跟 APP 可以提供查詢電費的功能,但你都會記得電費帳單上的的電號?難道每次查詢都要手動輸入?還要另外下載 APP?
查一個電費為什麼要這麼費工,甚至家中父母可能也不會操作
那不如由我們做一個 python 爬蟲 + Line Notify 功能吧!讓電費帳單可以定期自動推播,這樣就能省去很多時間了~

另外也可以自行幫家中父母家人串接 Line Notify,可以讓他們永遠不會忘記繳費,也可以隨時收到最新的電費狀況
(我父母就時常搞丟電費帳單XDD,也會忘記到底有沒有繳費)

技術範圍

  • captcha 圖像辨識
  • python爬蟲 - selenium
  • Line Notify - 串接推播
  • AWS EC2 - 設定 cronjob 定期執行

撰寫前,請先準備好家中的電費帳單,等等需要輸入相關個人資料的
紅字部分為稍後我們需要的資訊,其餘內容為個人詳細資訊用不到

  • 用電戶名
  • 電號
你的電費帳單

進入正題

首先,先思考此次爬蟲的邏輯及目的,還要稍微分析一下網站架構,最後再開始撰寫 code

請先進到 台電電費查詢 的網站頁面後,開始手動操作一遍查詢電費的流程

我相信上述這些操作難不倒各位
由於要較多個人資訊,故而都擋起來以防安全
反正只需要了解要爬哪些欄位就好~

看到這部分可能會想說
為什能不直接用撈 http 封包的方式就好了?」、「撈 http 封包直接打資料操作更快吧?

http封包: 指的就是開啟 chrome devtools 後,查看 Network 所有封包的數據,可以取得到各個 request 的 url、 body、cookie、header 內容等等,以及其餘JavaScript、CSS、圖片等等

devtools

我當然找過了~可惜我發現台電網站並沒有使用 API 方式傳遞資料
也就是說
他們將資料傳遞直接寫在 code function 中,這樣外界也無法取得到資料流向
通常會這樣呈現的網站多半前後端是一體成型(此部分有說錯的話歡迎請糾正)

e.g. 
利用 php 生成的網站,數據操作基本上可以直接輸入進 DB,故而就不用再額外建立 api 通道取處理

就不像現今較流行的前後端分離

e.g. Vue.js(前端框架語言) + golang(後端框架語言) 等等

當然也有可能是他們有特殊的方式處理邏輯,就是為了以防有人會去撈封包進行操作之類的

基本上今天先了解爬蟲的邏輯,並且也稍微了解了台電網站架構

下篇會再介紹 captcha 圖像辨識 的部分

下篇預告:
我們使用的圖像辨識平台為 2Captcha API ,有興趣的可以先自行摸索~
並且會發現台電使用 captcha 的方式很聰明,會阻擋用戶直接撈取 captcha img src

如果直接點 Current source url 的話,就會出現下方阻擋頁面

這確實是很聰明的做法,不過仍然無法阻擋我爬蟲的XD

下篇文章會再仔細說明實作方式

--

--