Python(Selenium)で東京ガスのcsvをダウンロード
前回は東京電力のでんき家計簿だったが、今度は東京ガスのガス使用量のcsvを自動でダウンロード。
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
browser = webdriver.Chrome('/usr/local/bin/chromedriver')
browser.set_page_load_timeout(30)
browser.get('https://members.tokyo-gas.co.jp/')
GAS_ID = 'my tokyo gasのID'
GASS_PASSWD = 'my tokyo gasのパスワード'
# loginボタンを押す
selector = "#login_openid"
elm = browser.find_element_by_css_selector(selector)
elm.click()
time.sleep(5)
selector = "#loginId"
elm = browser.find_element_by_css_selector(selector)
elm.send_keys(GAS_ID)
selector = "#password"
elm = browser.find_element_by_css_selector(selector)
elm.send_keys(GASS_PASSWD)
selector = "#submit-btn"
elm = browser.find_element_by_css_selector(selector)
elm.click()
time.sleep(5)
# CSVをダウンロードするAPI
browser.get('https://members.tokyo-gas.co.jp/api/mieru/chargeAmountCsv.jsp?no=0&target=total')
time.sleep(8) # csvダウンロードをちょっと待つ
browser.quit()
今回のエッセンス
でんきの時とほとんど変わらないので特に無し。
更新(2020/12/13)
csvのダウンロードボタンを押すselectorが構成が変わってうまく押せなくなっていたので解析したらcsvダウンロードのAPIを呼ぶことが出来ることがわかったので修正。
更新(2021/1/16)
ページ遷移やCSVのダウンロードの待ち時間を減らすために以下の通り修正。
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
def every_downloads_chrome(driver):
"""
以下の情報より
https://stackoverflow.com/questions/48263317/selenium-python-waiting-for-a-download-process-to-complete-using-chrome-web?rq=1
"""
if not driver.current_url.startswith("chrome://downloads"):
driver.get("chrome://downloads/")
return driver.execute_script("""
return document.querySelector('downloads-manager')
.shadowRoot.querySelector('#downloadsList')
.items.filter(e => e.state === 'COMPLETE')
.map(e => e.filePath || e.file_path || e.fileUrl || e.file_url);
""")
def download_gas_csv(user_id, password):
"""
ガス料金のcsvファイルをダウンロードする
"""
browser = webdriver.Chrome('/usr/local/bin/chromedriver')
browser.implicitly_wait(20) # tagが見つかるまでデフォルトで最大20秒待つ
browser.get('https://members.tokyo-gas.co.jp/')
#print(browser.page_source)
# loginボタンを押す
selector = "#login_openid"
elm = browser.find_element_by_css_selector(selector)
elm.click()
selector = "#loginId"
elm = browser.find_element_by_css_selector(selector)
elm.send_keys(user_id)
selector = "#password"
elm = browser.find_element_by_css_selector(selector)
elm.send_keys(password)
selector = "#submit-btn"
elm = browser.find_element_by_css_selector(selector)
elm.click()
# CSVをダウンロードするAPI
browser.get('https://members.tokyo-gas.co.jp/api/mieru/chargeAmountCsv.jsp?no=0&target=total')
# waits for all the files to be completed and returns the paths
paths = WebDriverWait(browser, 120, 1).until(every_downloads_chrome)
print(paths)
browser.quit()
この記事が気に入ったらサポートをしてみませんか?