質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

0回答

1353閲覧

selenium pythonでWEBスクレイピング処理が落ちないようにしたい

kamiokan

総合スコア54

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/02/23 03:08

前提・実現したいこと

ログインが必要な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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問