東京ガスのCSVを自動でダウンロードしてみた(Python,Selenium)
なぜ書いたのか
東京電力のスマートメーターが導入されていて、数十分単位での電力使用量がCSVから取得できるため、電力使用量の傾向をグラフ化して、何の電化製品が多く利用されているか探るため。
入居している居室の契約アンペアが30Aで、希にバツンッ!って落っことしてしまうので、調べる必要がでてきた。
自宅にはSwitchBotが導入されているので、スマートプラグで計測するのも手段の一つだが、まずはコストのかからない方法で試してみようと思う。
Pythonコード
TokyoGas_CsvDownloader.py
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import create_month_folder
#SeleniumDriver(Chrome)を指定する。
strDownloadFolder = create_month_folder.createFolder()
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_experimental_option("prefs", {"download.default_directory": strDownloadFolder })
options.add_experimental_option("excludeSwitches", ["enable-logging"])
options.use_chromium = True
driver = webdriver.Chrome(executable_path="{chromedriver.exeのパス}", chrome_options=options)
#東京ガスのページを開く
driver.get("https://members.tokyo-gas.co.jp/");
#ログインページを開く
driver.get("https://members.tokyo-gas.co.jp/login_openid.jsp")
#待機
driver.implicitly_wait(5)
#ログインID/PW
strLoginId = "{ユーザーID}"
strLoginPw = "{パスワード}"
str2StepKey = "{二段階認証のやつ(自分の場合、口座番号下4桁}"
#待機
driver.implicitly_wait(5)
#ログインID/PWの要素を取得
el_id = driver.find_element_by_name("loginId")
el_pw = driver.find_element_by_name("password")
el_ok = driver.find_element_by_name("button1")
el_id.send_keys(strLoginId)
el_pw.send_keys(strLoginPw)
el_ok.click()
#待機
driver.implicitly_wait(5)
time.sleep(5)
#「料金・使用量のグラフを見る」ページを開く
strMeisaiUrl = "https://members.tokyo-gas.co.jp/services/mieru/total.html"
driver.get(strMeisaiUrl)
#待機
driver.implicitly_wait(5)
#CSVをDLする
driver.get("https://members.tokyo-gas.co.jp/api/mieru/chargeAmountCsv.jsp?no=0&target=total")
driver.implicitly_wait(5)
#ガスPDF
driver.get(strMeisaiUrl)
driver.get("https://members.tokyo-gas.co.jp/services/mieru/pdf.html?no=0&type=1&page=/services/mieru/total.html")
el_2Step = driver.find_element_by_id("pay_number")
el_2Step.send_keys(str2StepKey)
el_2Step.send_keys(Keys.RETURN)
driver.implicitly_wait(5)
#電気PDF
driver.get(strMeisaiUrl)
driver.get("https://members.tokyo-gas.co.jp/services/mieru/pdf.html?no=0&point=&type=2&page=/services/mieru/total.html")
driver.implicitly_wait(5)
#ログアウト
driver.get("https://members.tokyo-gas.co.jp/logout.html")
#Seleniumを閉じる
time.sleep(5)
driver.quit()
create_month_folder.py
import datetime
import os
def createFolder():
now = datetime.datetime.now()
current_time = now.strftime("%Y%m%d")
dir_for_output = "{任意のパス}//" + current_time
os.makedirs(dir_for_output, exist_ok=True)
return dir_for_output
※Python内でディレクトリを記載する場合はWindowsの「\ (¥記号)」を「\\」にしてエスケープする必要があります。
実際にDLされたCSV
これを煮たり焼いたりして、傾向分析を行うことになります。
ほかの利用方法
このPythonをタスクスケジューラで月次起動させれば、CSVを自動でアーカイブ保存できる事になります。
注意書き
1. このコードを煮たり焼いたりするのは、ご自由にどうぞ。
2. いかなる損害や不具合でも、保証やサポートとか一切しません。
3. サイトのリニューアル等で動かなくなる可能性が非常にあります。
4. 汚いコードへの建設的なアドバイスは受け付けます。
5. ただし、豆腐メンタルなため、煽ったり暴言はご遠慮ください。