はじめに
最近スクレイピングを回していることが多いのですが、謎のエラーによく阻まれていたのですが、これがchrome側の問題であることを知ったので共有&まとめをします。
自分の環境では以下のようなエラーが頻発していました。
File "/Users/***/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 437, in get
self.execute(Command.GET, {'url': url})
File "/Users/***/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 425, in execute
self.error_handler.check_response(response)
File "/Users/***/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot determine loading status
from unknown error: unexpected command response
(Session info: chrome=103.0.5060.114)
頻発といっても、20分30分程度なら問題なく動く場合もあったので、例外処理等で適当に対応していたため、調べるのが遅くなりましたね。。
原因
原因と言っても、chrome側に問題があるそうなので、根本的な対処をするのは難しいです。
そこで考えられるのは以下二つの選択肢です。
・chromeのダウングレード
・chromeのアップグレード(Beta)
この記事では、アップグレード。つまりベータ版をダウンロードしてそちらにパスを通すことをお勧めします。
理由は複数ありますが、ダウングレード自体がそもそもめんどくさい。Beta版は普通のバージョンと共存できる。というのが自分的には大きな理由です。
対応
まずはベータ版のダウンロードを行いましょう!!
https://www.google.com/intl/ja/chrome/beta/
次にバージョンを合わせたchrome driverをインストールします。
https://chromedriver.chromium.org/downloads
Seleniumで呼び出すときのパスを設定してあげる。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location = '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta'
driver = webdriver.Chrome(service=Service('./chromedriver-bata'), options=options)
修正箇所は以上です、後は今まで通りのコードで動作すると思います!
このくらいならさっさと対処しておけばよかった。。