【Python】Chromeを自動操縦して楽天証券の保有商品情報を取得する

Python

PythonでChromeを自動操縦して、楽天証券のwebサイトにアクセスし、保有商品.csvをダウンロードする方法について紹介します。

このPythonでできること

Pythonを実行すると、楽天証券のログインページからログインID・パスワードを入力してログインし、保有商品ページに移動した後、[CSVで保存]を実行します。

このPythonでできること
※個人情報な部分は黒塗りにしています

ソースコードと解説

下記のソースコードをpyファイルにコピペし、7行目のloginIDとPasswordを書き換えた後、プログラムを実行することで、Chromeを自動操縦して楽天証券の保有商品情報を取得するできます。
注意点として、下記のプログラムではWebブラウザを自動操縦するために「Selenium」というライブラリと「ChromeDriver」というWebドライバを使用しているため、実行する前に上記の2つを別途インストールする必要があります。

#SeleniumのWebDriverをインポート
from selenium import webdriver
import os, time

# 楽天証券のログインの情報を指定
login_url = 'https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html'
user_id, password = ('loginID', 'password') #任意のログインID,パスワードを入力
# 保存先フォルダ(絶対パスで指定)
save_dir = os.path.dirname(os.path.abspath(__file__))
save_file = save_dir + '/list.csv'
# Chromeのオプションで保存先フォルダを設定
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {
    'download.default_directory': save_dir})
# Chromeをヘッドレスモードで起動
options.add_argument('--headless')

# メイン処理
def login_download():
    # Chromeを起動
    driver = webdriver.Chrome(options=options)
    # ログイン処理実行
    try_login(driver)
    # マイページに移動
    link_click_xpath(driver, '/html/body/div[2]/div/div[1]/form[2]/table/tbody/tr[1]/td/span/div/table/tbody/tr[2]/td[1]/div[1]/table/thead/tr[2]/td[1]/nobr/span/a')
    # ダウンロード
    link_click_xpath(driver, "/html/body/div[2]/div/div[1]/div/div/table[1]/tbody/tr/td/div/table/tbody/tr/td[4]/div/a")
    # ダウンロード完了まで最大30秒待機
    for i in range(10):
        if os.path.exists(save_file): break
        time.sleep(1)

# ログイン処理
def try_login(driver):
    # ログインページを開く
    driver.get(login_url)
    # ユーザー名とパスワードを書き込む
    usr = driver.find_element_by_name('loginid')
    usr.send_keys(user_id)
    pwd = driver.find_element_by_name('passwd')
    pwd.send_keys(password)
    pwd.submit() # 送信 
    time.sleep(2)

# ラベルを指定してリンクを検索しクリックする
def link_click_xpath(driver, xxpath):
    # a = driver.find_element_by_partial_link_text(label)
    a = driver.find_element_by_xpath(xxpath)
    a.click()
    time.sleep(1)

if __name__ == '__main__':
    login_download()

コメント

タイトルとURLをコピーしました