Pythonでe-TAXへのログインを自動化する方法

税理士の伴 洋太郎(ばん ようたろう) @ban_tax240です。

Pythonでe-Taxソフト(WEB版)へログインするためには、次のような作業が必要です

ログインに必要な作業
  1. e-Taxソフト(WEB版)をブラウザで開く
  2. 「ログイン」ボタンをクリックする
  3. IDを4桁ごとに分けて入力する
  4. パスワードを入力する
  5. 「ログイン」ボタンをクリックする

これらを自動化するプログラムをPythonで作成しましたので、紹介します。

#パッケージのインポート
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import glob
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
import time

# ログイン先のURL、利用者識別番号、パスワードを設定
URL = 'https://clientweb.e-tax.nta.go.jp/UF_WEB/WP000/FCSE00001/SE00S010SCR.do'
ID_1 = '1234'
ID_2 = '5678'
ID_3 = '9012'
ID_4 = '3456'
PASS = 'pass-word'

# 拡張機能と自動バージョン管理を有効化
extension_path = glob.glob('e-TaxAP*.crx')
options = webdriver.ChromeOptions()
options.add_extension(extension_path[0])
service = Service(ChromeDriverManager().install())

# ログインメニューを開く
driver = webdriver.Chrome(options=options,service=service)
driver.get(URL)
button1_xpath = '//img[@alt="ログイン"]' 
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH,button1_xpath)))
time.sleep(1) 
button1 = driver.find_element(By.XPATH,button1_xpath)
button1.click()

# ログインを実行
id_xpath = '//div[@id="dijit_layout_ContentPane_17"]/input'
pass_xpath = '//input[@id="maskat_widget_dojo_55"]'
button2_xpath = '//a[@tabindex="28"]/img[@alt="ログイン"]'
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH,id_xpath)))
time.sleep(1)
id1_input = driver.find_element(By.XPATH,f'{id_xpath}[1]')
id2_input = driver.find_element(By.XPATH,f'{id_xpath}[2]')
id3_input = driver.find_element(By.XPATH,f'{id_xpath}[3]')
id4_input = driver.find_element(By.XPATH,f'{id_xpath}[4]')
pass_input = driver.find_element(By.XPATH,pass_xpath)
id1_input.send_keys(ID_1)
id2_input.send_keys(ID_2)
id3_input.send_keys(ID_3)
id4_input.send_keys(ID_4)
pass_input.send_keys(PASS)
rogin_button_2=driver.find_element(By.XPATH,button2_xpath)
rogin_button_2.click()

コードを書く前の準備

コードを書く前に、いくつか準備しておくことがあります。

開発環境を構築しておく

なにはともあれ、pythonによるコーディングを行える環境を整える必要があります。はじめてPythonの開発に取り組む場合は、実行しましょう。

「python 環境構築」

でググればいくらでも情報が出てきますので、参考にしてください。

ひとまず、「Anaconda」をインストールしておけば間違いはないでしょう。Anacondaとは、Pythonの開発に必要なものをひとまとめにしたパッケージのことです。

ライブラリをインストールしておく

「ライブラリ」とは、ある特定の分野に関する処理を行うプログラムをひとまとめにしたもののことです。

日付けや時刻に関する処理をまとめた「datetime」、Excelファイルを操作する処理をまとめた「openpyxl」など、数多くのライブラリがPythonで使用できます。

またライブラリには、Pythonのインストール時に同時にインストールされる「標準ライブラリ」と、後から追加しなければいけない「外部ライブラリ」とがあります。先述の「datetime」は標準ライブラリで、「openpyxl」は外部ライブラリです。

今回の開発する自動ログインプログラムでは、以下の2つの外部ライブラリを使用します

使用する外部ライブラリ
  1. selenium
    ブラウザ操作に関する機能をまとめたライブラリ
  2. webdriver_manager
    seleniumで使用するブラウザの管理に関する機能をまとめたライブラリ

過去にこれらを使ったことがない場合には、インストールしておきます。

インストール方法については

「python ライブラリ インストール」

でググればいくらでも情報が出てきますので、参考にしてください。

# 外部ライブラリをインストール
pip install selenium
pip install webdriver_manager

e-TaxAPをダウンロードしておく

e-Tax(WEB版)をChromeで正常に動作させるためには、拡張機能「e-Tax AP」を利用可能な状態にしておく必要があります。

自動化するブラウザでe-TaxAPを有効化するために、拡張機能のファイル(拡張子.crx)をダウンロードしておきましょう。

ダウンロード方法は

「crxファイル ダウンロード」

でググって確認してください。

ダウンロードしたファイルは、これからコーディングするpythonファイルと同じフォルダに置いておきます。

コードを書く

冒頭で紹介したコードを、各要素ごとに説明します。

ライブラリから使用する機能をインポートする

インストールしたライブラリには、さまざまな機能が含まれています。

そのうち、このプログラムで使用する機能だけを呼び出しましょう。

#パッケージのインポート
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import glob
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
import time

上記のコードでは、以下を設定しています。

  • ブラウザを自動操作する機能(2行目)
  • ブラウザ上の位置を指定する機能(3行目)
  • ブラウザのバージョンを自動更新する機能(4行目)
  • バージョン自動更新を実装する機能(5行目)
  • ダウンロードした拡張機能を呼び出すのに使用する機能(6行目)
  • ブラウザの待機処理に使う機能(7~9行目)

ログイン先のURL、利用者識別番号、パスワードを設定する

# ログイン先のURL、利用者識別番号、パスワードを設定
URL = 'https://clientweb.e-tax.nta.go.jp/UF_WEB/WP000/FCSE00001/SE00S010SCR.do'
ID_1 = '1234'
ID_2 = '5678'
ID_3 = '9012'
ID_4 = '3456'
PASS = 'pass-word'

上記のコードでは、以下を設定しています。

  • e-taxログインページのURL(2行目)
  • 利用者識別番号(3~6行目)
  • 暗証番号(7行目)

利用者識別番号は、4ケタずつ入力します。

ID(利用者識別番号)とPASS(暗証番号)はダミーです。実際に使用するものに書き換えましょう。書き換える際は、「'」と「'」の間に値を入力してください。

e-TaxAPとバージョン自動管理を有効化する

# e-TaxAPと自動バージョン管理を有効化
extension_path = glob.glob('e-TaxAP*.crx')
options = webdriver.ChromeOptions()
options.add_extension(extension_path[0])
service = Service(ChromeDriverManager().install())

上記のコードでは、次の処理を行っています。

  • e-TaxAPファイル(.crx)のファイルパスを取得(2行目)
  • ブラウザのオプションに拡張機能を追加(3~4行目)
  • ブラウザ自動更新を有効化(5行目)
 Chromeの操作を自動化するためには、普段使用しているChromeと同じバージョンのChromeDriverを事前にダウンロードしておく必要があります。
ChromeDriverManegerを利用すると、ダウンロードを自動化できてむちゃくちゃ便利です。

ログインメニューを開く

# ログインメニューを開く
driver = webdriver.Chrome(options=options,service=service)
driver.get(URL)
button1_xpath = '//img[@alt="ログイン"]' 
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH,button1_xpath)))
time.sleep(1) 
button1 = driver.find_element(By.XPATH,button1_xpath)
button1.click()

上記のコードでは、次の処理を行っています。

  • 指定したURLにアクセス(2~3行目)
  • 「ログイン」ボタンの場所を指定(4行目)
  • 「ログイン」ボタンがクリックできる状態になるまで待機(5~6行目)
  • 「ログイン」ボタンをクリック(7~8行目)
e-Taxの稼働時間外にアクセスした場合、ここで例外が発生してプログラムが終了します。

ボタンの場所を指定する方法

ログインボタンの場所を指定する方法はいくつかあるのですが、ここでは「XPath」という記法によって表現しています。XPathは、HTMLなどで記述された内容のなかから特定の箇所を指定するための言語です。

e-Tax側の仕様変更によってログインボタンの場所が変わる可能性もあります。その場合は、コード上記コード内のXPathも変更しなければなりません。

Chromeの場合、つぎの方法でXPathを簡単に取得できます。

XPathの取得方法
  1. Chromeのデベロッパーツールを開く(Windowsの場合「F12」キーを押す)
  2. XPathを取得したい場所を右クリックする
  3. 「検証」を選択する
  4. デベロッパーツール内のハイライトされている部分を右クリックする
  5. Copy>Copy XPath の順に選択する

ログインする

# ログインを実行
id_xpath = '//div[@id="dijit_layout_ContentPane_17"]/input'
pass_xpath = '//input[@id="maskat_widget_dojo_55"]'
button2_xpath = '//a[@tabindex="28"]/img[@alt="ログイン"]'
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH,id_xpath)))
time.sleep(1)
id1_input = driver.find_element(By.XPATH,f'{id_xpath}[1]')
id2_input = driver.find_element(By.XPATH,f'{id_xpath}[2]')
id3_input = driver.find_element(By.XPATH,f'{id_xpath}[3]')
id4_input = driver.find_element(By.XPATH,f'{id_xpath}[4]')
pass_input = driver.find_element(By.XPATH,pass_xpath)
id1_input.send_keys(ID_1)
id2_input.send_keys(ID_2)
id3_input.send_keys(ID_3)
id4_input.send_keys(ID_4)
pass_input.send_keys(PASS)
rogin_button_2=driver.find_element(By.XPATH,button2_xpath)
rogin_button_2.click()

上記コードでは、以下の処理を実行しています。

  • IDとパスの入力欄、「ログイン」ボタンの場所を指定(2~4行目)
  • ID入力欄が入力可能な状態になるまで待機(5~6行目)
  • 入力欄に、事前に設定したIDとパスワードを入力(7~16行目)
  • 「ログイン」ボタンをクリック(17~18行目)

7~16行目の部分は、もうちょっと短く記述することも可能です。

id_pass = [ID_1,ID_2,ID_3,ID_4,PASS]
inputs = [driver.find_element(By.XPATH,f'{id_xpath}[{i}]') for i in range(1,5)]
inputs.append(driver.find_element(By.XPATH,f'{pass_xpath}'))

for input,value in zip(inputs,id_pass):
    input.send_keys(value)

まとめ

Pythonを利用したe-Tax(WEB版)への自動ログインプログラムについて解説しました。

ライブラリを利用すれば、短いコードで処理を実装することが可能です。お試しあれ!

この記事を書いたひと

伴 洋太郎(ばん ようたろう)
伴 洋太郎(ばん ようたろう)税理士
BANZAI税理士事務所 代表税理士。1級ファイナンシャル・プランニング技能士。1982年6月21日生まれ。個人事業主、フリーランス、小規模法人の税務が得意で、一般の方向けにやさしい解説記事を書けるのが強み。詳しいプロフィールはこちら。
pagetop
MENU CLOSE
https://ban-tax.com