見出し画像

【改(対応版)】東京ガスCSVダウンローダー【やっつけこーでぃんぐ】

ごあいさつ

みなさま、こんにちは。久しぶりのnoteです。
都内は雨が降っており、天気痛持ちのボクは土日で引きこもっています。
そんな中、昔作成したスクリプト類のメンテや整理をしていて、以下のスクリプトがマッッッッッッタク動いていないことが判明しました。

ので、自宅のスクリプトを直すついでに、スクリプトを公開します。

ほんPen

以前、東京ガスから自動的にCSVをダウンロードする、Python + Selenium スクリプトを以下の記事で公開していました。

しかし、東京ガスのマイページがリニューアル(大幅リプレース)に伴い、既存コードが動作しなくなりました(当たり前)
さらに、それに輪をかけてSelenium3からSelenium4にアップデートしたところ、`find_element_by*`を非推奨として、エラー(Warning)を表示するようになってしまいました。

Python + Selenium コード

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import datetime
import time
import os

def main():

    strRootPath = r'{ダウンロードしたファイルの保存先}'
    
    strDlPath = make_download_path(strRootPath)
    download_process(strDlPath)

def make_download_path(strRootPath):
    strFolderName = get_date()
    strMakePath = strRootPath + '\\' + strFolderName
    os.makedirs(strMakePath,exist_ok=True)
    return strMakePath

def get_date():
    today = datetime.date.today()
    return today.strftime('%Y%m%d')

def download_process(strDownloadPath):

    wite_time = 30

    strId = '{認証情報:ID}'
    strPw = '{認証情報:PW}'
    str2F = '{認証情報:2段階認証}'

    #ログイン処理
    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    options.add_experimental_option("prefs", {"download.default_directory": strDownloadPath })
    # options.add_argument('--headless')    # 非表示で実行する場合はコメントアウトを外す
    d = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)

    d.get('https://members.tokyo-gas.co.jp/')
    d.implicitly_wait(wite_time)
    d.find_element(By.XPATH,'/html/body/main/section[2]/a[1]').click()
    d.implicitly_wait(wite_time)
    d.find_element(By.XPATH,'//*[@id="loginId"]').send_keys(strId)
    d.find_element(By.XPATH,'//*[@id="password"]').send_keys(strPw)
    d.find_element(By.NAME,'button1').click()
    d.implicitly_wait(wite_time)
    
    time.sleep(10)
    d.implicitly_wait(wite_time)
    
    for i in[0,1,2]:

        # マイページでの操作
        d.get('https://members.tokyo-gas.co.jp/services/mieru/total.html')
        d.implicitly_wait(wite_time)
        d.find_element(By.XPATH,'/html/body/main/div/div/div/section[3]/div/a[3]').click()

        if(i==0):
            # ガスPDFをDL
            d.implicitly_wait(wite_time)
            d.find_element(By.XPATH,'//*[@id="modal-total-charge"]/a[1]').click()    
            
            # 認証
            d.implicitly_wait(wite_time)
            d.find_element(By.ID,'pay_number').send_keys(str2F)
            d.find_element(By.XPATH,'//*[@id="form"]/input[6]').click()
            time.sleep(1)

        elif(i==1):
            # 電気PDFをDL
            d.implicitly_wait(wite_time)
            d.find_element(By.XPATH,'//*[@id="modal-total-charge"]/a[2]').click()
            time.sleep(1)

        elif(i==2):
            d.implicitly_wait(wite_time)
            d.find_element(By.XPATH,'//*[@id="modal-total-charge"]/a[3]').click()        
            time.sleep(1)

    time.sleep(15)

if(__name__ == "__main__"):
    global d
    main()

お約束

  • コードに関するクレームは受け付けません。
    (建設的なアドバイスは大大大歓迎)

  • このスクリプトは煮るなり焼くなりお好きにどうぞ。

  • このスクリプトによって発生した、いかなる損害や不具合に関して、一切のサポートや保証はいたしません。

  • 豆腐メンタルなので、暴言や中小はやめてね。。。