見出し画像

東京ガスの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

画像1

これを煮たり焼いたりして、傾向分析を行うことになります。

ほかの利用方法

このPythonをタスクスケジューラで月次起動させれば、CSVを自動でアーカイブ保存できる事になります。

注意書き

1. このコードを煮たり焼いたりするのは、ご自由にどうぞ。
2. いかなる損害や不具合でも、保証やサポートとか一切しません。
3. サイトのリニューアル等で動かなくなる可能性が非常にあります。
4. 汚いコードへの建設的なアドバイスは受け付けます。
5. ただし、豆腐メンタルなため、煽ったり暴言はご遠慮ください。