SBI証券の損益管理を自動化してみる日記【その2】

さて、前回の調査で特定口座の決済時の手数料、税金、損益は、譲渡益税明細画面の検索結果からデータが取得できることがわかりました。

データが取得できるのは過去2年までです。この検索結果のデータを見てみると、決済時の利益に掛かる税金はどうやら取引毎ではなく日毎にまとめて表示されているようです。

以前の「SBI証券の資産推移をグラフで表示する方法を考えてみる日記」でSBI証券のサイトへのログインするコードをGoogle Colab上に作っているので、これにコードを追加する形で進めていこうと思います。

driverにはSBI証券のサイトにログインしたあとのChromeDriverを渡した状態から書いていきます。

def get_profit_data(driver):

   #取引履歴をクリック
   driver.find_element_by_xpath('//*[@id="link02_account_menu"]/ul/li[7]/a').click()

   #ChromeDriverからhtmlデータを取得
   html = driver.page_source

   print(html)

get_profit_data(driver)

実行してみます。

ElementNotInteractableException Traceback (most recent call last)

早速エラーが出ました。要素がインタラクティブじゃ無い的なエラーです。マウスオーバーしないと表示されないメニューはクリック不可なのでしょうか。表示されているメニューを辿って口座管理→取引履歴と移動してみることにします。

def get_profit_data(driver):

   # 口座管理をクリック
   driver.find_element_by_xpath('//*[@id="link02M"]/ul/li[3]/a').click()

   #取引履歴をクリック
   driver.find_element_by_xpath('//*[@id="navi02P"]/ul/li[7]/div/a').click()

   #ChromeDriverからhtmlデータを取得
   html = driver.page_source

   print(html)

get_profit_data(driver)

実行してみます。上手くいきました。これだと大丈夫なようです。同じ様にして譲渡益税明細のページに移動します。

スクリーンショット 2020-10-22 0.00.19

この画面で検索条件を指定します。「過去2年間の履歴をご覧いただけます。」とのことなので、とりあえず受渡日のFromは今年から2年引いた年の1月1日を指定すれば良いですね。その後に照会ボタンをクリックすれば良いはずです。コードはこのようになりました。

from selenium.webdriver.support.ui import Select
def get_profit_data(driver):

   # 口座管理をクリック
   driver.find_element_by_xpath('//*[@id="link02M"]/ul/li[3]/a').click()

   # 取引履歴をクリック
   driver.find_element_by_xpath('//*[@id="navi02P"]/ul/li[7]/div/a').click()

   # 譲渡益税明細をクリック
   driver.find_element_by_xpath('//*[@id="ch4"]/div/a').click()

   # # 検索条件を指定
   elm = driver.find_element_by_name('ref_from_yyyy')
   Select(elm).select_by_value(str(datetime.datetime.today().year -2))

   elm = driver.find_element_by_name('ref_from_mm')
   Select(elm).select_by_value("01")

   elm = driver.find_element_by_name('ref_from_dd')
   Select(elm).select_by_value("01")

   # 照会ボタンをクリック
   driver.find_element_by_name("ACT_search").click()

   # ChromeDriverからhtmlデータを取得
   html = driver.page_source

   # BeautifulSoupでパース
   soup = BeautifulSoup(html, "html.parser")

   print(soup)

get_profit_data(driver)

最初は検索条件の要素が見つかりませんというエラーが出て色々調べていたのですが、突然上手く動き出しました。原因は分からずじまいですが、とにかく上手く動いたのでよしとしましょう。

では、今日はこの辺にしておきます。

いいなと思ったら応援しよう!