ネットバンキングにログインして明細をCSVでダウンロードするプログラムを作っています。
ここまでの関数をabc_download(url)として定義しました。
すでに別タブなどでログインしていた場合、エラーとなるので
try-exceptでログインしていた場合をexcept(例外)として定め、
ログアウトしてブラウザを一旦閉じるようにしました。
この後に例外処理の中で、abc_download(url)を続けて実行しようと
すると下記のように、MaxRetryErrorとなります。
MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=63184): Max retries exceeded with url: /session/0fd3c3edf018690894996648427cc730/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x016C18D0>: Failed to establish a new connection: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。'))
今回実行しているコードは下記です。
Python
1from selenium import webdriver 2import chromedriver_binary 3from selenium.webdriver.support.select import Select 4from selenium.webdriver.common.action_chains import ActionChains 5from selenium.webdriver.chrome.options import Options 6from selenium.common.exceptions import NoSuchElementException 7import glob 8import os 9import time 10 11# 現在の時間 12t1 = time.time() 13 14''' 15ダウンロードフォルダーをデフォルトから変更 16↓のコメントアウトを外すと5行目のインポートはいらない 17''' 18# options = webdriver.ChromeOptions() 19options = Options() 20options.add_experimental_option('prefs', { 21'download.default_directory': r'G:\Fのバックアップ\ドキュメント\download', 22'download.prompt_for_download': False, 23'download.directory_upgrade': True, 24'safebrowsing.enabled': True 25}) 26# options.add_argument('--headless') 27driver = webdriver.Chrome(options=options) 28# 要素が見つかるまで5秒待つ設定 29driver.implicitly_wait(5) 30actions = ActionChains(driver) 31 32url="https://www.abc-shinkin.co.jp/web-banking/" 33 34def abc_download(url): 35 driver.get(url) 36 driver.find_element_by_xpath('//*[@id="page_topics_list19"]/div/div[2]/div/div[1]/div[1]/form/div/a').click() 37 38 handle_array = driver.window_handles 39 driver.switch_to.window(handle_array[1]) 40 time.sleep(3) 41 driver.find_element_by_xpath('//*[@id="splash-78561-close-button"]').click() 42 43 driver.find_element_by_name("userId").send_keys("******") 44 driver.find_element_by_name("loginPwd").send_keys("*****") 45 driver.find_element_by_name("LoginPage").click() 46 time.sleep(3) 47 48 try: 49 driver.find_element_by_link_text(u"入出金明細照会").click() 50 except NoSuchElementException: 51 driver.find_element_by_xpath('//*[@id="main"]/form/div[3]/div[1]/input').click() 52 time.sleep(3) 53 driver.quit() 54 print("NoSuchElementExceptionが起きたので一旦ログアウト") 55 abc_download(url) 56 # ラジオボタンの選択(xpathでOK) 57 driver.find_element_by_xpath("//div[@id='main']/form/div[4]/ul/li[6]/label").click() 58 59 time.sleep(3) 60 # 明細を見るボタンクリック 61 driver.find_element_by_name("viewDetailsBtn").click() 62 time.sleep(3) 63 # PDFのダウンロードボタンクリック 64 driver.find_element_by_xpath('//*[@id="main"]/form[1]/div[4]/ul/li[1]/div/input').click() 65 time.sleep(3) 66 driver.quit() 67 68abc_download(url) 69 70# 処理後の時刻 71t2 = time.time() 72 73# 経過時間を表示 74elapsed_time = t2-t1 75print(f"経過時間:{elapsed_time}")
具体的にエラーが起こっている場所は上記コードの
Python
1 except NoSuchElementException: 2 driver.find_element_by_xpath('//*[@id="main"]/form/div[3]/div[1]/input').click() 3 time.sleep(3) 4 driver.quit() 5 print("NoSuchElementExceptionが起きたので一旦ログアウト") 6 abc_download(url)
のabc_download(url)の部分です。
どのようにすれば例外発生時にログアウトした後に、再帰的にabc_download(url)を使うことができるのでしょうか?
実行環境:Windows10
Python 3.7.6
ご知見のおありになります方
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/20 04:07