前提・実現したいこと
ログインが必要なWEBサービスから、自社の情報を定期的にWEBスクレイピングで取得しています。
(アカウントが複数あるため、アカウント別で6つブラウザを立ち上げて、同時に動かしています)
24時間落ちることなく稼働させたいです。
例外処理が起こった時にブラウザを一度閉じて再ログインする前に「chrome not reachable」というエラーが出て止まってしまいます。落ちることなく稼働させるために必要なことを教えていただきたいです。
試したこと
予期せぬエラーが起きた時のために下記のような例外処理を書いています。例外をキャッチしたら10分半待機した後に再度ログインから始めるようにしています。
該当のソースコード
python
1 ############## 2 # 3 # 例外をキャッチしたらドライバーを閉じてやり直す 4 # 5 ############## 6 while True: 7 # driverの初期化 8 driver = bd.build(dic["binary_location"], dic["user_agent"], dic["webdriver_path"]) 9 10 # ログイン状態を示す変数の初期値 11 logged_in = False 12 13 try: 14 sc2sb.run(driver, logger, logged_in, dic["user_id"], dic["password"], dic["salon_id"], 15 dic["db_path_salocone2sb"], dic["api_url"]) 16 17 except NoSuchWindowException: 18 # ログを残す 19 logger.info('NoSuchWindowException例外が発生しました。') 20 21 # 10分30秒待機する 22 time.sleep(630) 23 24 except UnexpectedAlertPresentException: 25 alert_text = Alert(driver).text 26 Alert(driver).accept() # OKを押す 27 # ログを残す 28 logger.info('UnexpectedAlertPresentException例外が発生しました。') 29 logger.info(str(alert_text)) 30 31 # 10分30秒待機する 32 time.sleep(630) 33 34 except Exception as e: 35 # ログを残す 36 logger.info('何かしら例外が発生しました: ' + str(e)) 37 38 # 10分30秒待機する 39 time.sleep(630) 40 41 finally: 42 driver.close() 43 driver.quit() 44
発生している問題・エラーメッセージ
下記のようなエラーメッセージが出て、スクリプトが止まってしまう場合があります。
Traceback (most recent call last): File "run_script.py", line 34, in main dic["db_path_s2sb"], dic["api_url"]) File "/home/kamioka/my_script/automate/run_script.py", line 126, in run top_row_staff_id = b.fetch_top_row_staff_id() File "/home/kamioka/my_script/automate/lib/run_script.py", line 28, in fetch_top_row_staff_id element = self.driver.find_element_by_xpath('//*[@id="stockNameList"]/option[1]') File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element 'value': value})['value'] File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 241, in check_response raise exception_class(message, screen, stacktrace, alert_text) selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: 通信がタイムアウトしました。再度ページを読み込んでください。 Message: unexpected alert open: {Alert text : 通信がタイムアウトしました。再度ページを読み込んでください。} (Session info: chrome=85.0.4183.121) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "run_script.py", line 44, in main alert_text = Alert(driver).text File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/common/alert.py", line 67, in text return self.driver.execute(Command.W3C_GET_ALERT_TEXT)["value"] File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoAlertPresentException: Message: no such alert (Session info: chrome=85.0.4183.121) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "run_script.py", line 66, in <module> main() File "run_script.py", line 61, in main driver.close() File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 688, in close self.execute(Command.CLOSE) File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/home/kamioka/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: chrome not reachable (Session info: chrome=85.0.4183.121)
補足情報(FW/ツールのバージョンなど)
- 使用しているPC: ASUS X200M (Celeron N2830 2.16GHz / 4GB / HDD:500GB)
- OS: Lubuntu 18.4
- プログラミング言語: Python 3.6
- 使用しているWebドライバー: cromedriver 85
あなたの回答
tips
プレビュー