クロームのブラウザを自動で開きたく、下記のコードで利用していたのですが、最近MACをアップデートしてからエラーが起きるようになりました。
エラーからはchromedriverの更新がなされていないことが原因だと読み取れます。
コードの中でchromedriverの更新がなされていると思っていたのですが、間違っていたのでしょうか?
python
1from selenium import webdriver 2from time import sleep 3sleep(3) 4 5from webdriver_manager.chrome import ChromeDriverManager 6 7 8driver = webdriver.Chrome(ChromeDriverManager().install()) 9driver.get('https://google.com') 10 11browser = webdriver.Chrome()
エラーコード
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 91 Current browser version is 93.0.4577.82 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
エラーが出るのは、どの行でしょうか?
> driver = webdriver.Chrome(ChromeDriverManager().install())
ではエラーが出ず、
> browser = webdriver.Chrome()
ではエラーが出るのなら、前者と後者で使われてる「ChromeDriver」が異なってるのではないですかね
ありがとうございます。
デバッグでは後者の行でエラーを吐きました。
使用しているwebdriverが異なる場合、確認の方法、修正方法等分かりましたら教えて頂けませんか?
ターミナルで
which -a chromedriver
を実行したら、何か引っかかりませんか?
ターミナルで実行したら一件だけchromedriverが見つかりました。
しかし、どこにあるのかや、アップデートされているかの確認方法が分かりません。
無知で申し訳ありませんが教えて頂ければ幸いです。
which -a chromedriver
/usr/local/bin/chromedriver
下記の場所にあるchromedriverが古いバージョンとなっており、余計なのだと思い、削除致しました。
/usr/local/bin/chromedriver
しかし、今度は下記の様なエラーコードが発生し、実行出来ませんでした。更新されているchromedriverはありそうなのですが、プログラムの場所が悪いということなのでしょうか?お教え頂ければ幸いです。
エラーコード
====== WebDriver manager ======
Current google-chrome version is 93.0.4577
Get LATEST driver version for 93.0.4577
Driver [/Users/ユーザ名/.wdm/drivers/chromedriver/mac64/93.0.4577.63/chromedriver] found in cache
Traceback (most recent call last):
File "/Users/ユーザ名/PycharmProjects/pythonProject4/venv/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 72, in start
self.process = subprocess.Popen(cmd, env=self.env,
File "/Users/ユーザ名/PycharmProjects/anaconda/anaconda3/lib/python3.8/subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/Users/ユーザ名/PycharmProjects/anaconda/anaconda3/lib/python3.8/subprocess.py", line 1702, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/ユーザ名/PycharmProjects/pythonProject4/python_use/accountbook/login3.py", line 15, in <module>
browser = webdriver.Chrome()
File "/Users/ユーザ名/PycharmProjects/pythonProject4/venv/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
self.service.start()
File "/Users/ユーザ名/PycharmProjects/pythonProject4/venv/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 81, in start
raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
> どこにあるのか
「/usr/local/bin」にあります
過去にbrewで入れたことありませんか?
https://qiita.com/lemtosh469/items/da86d1ce919d458a8d8d
> アップデートされているかの確認
ターミナルで
/usr/local/bin/chromedriver --version
を実行したら、何て表示されますか?
> 下記の場所にあるchromedriverが古いバージョンとなっており、余計なのだと思い、削除致しました。
/usr/local/bin/chromedriver
たぶんそれが古いやつだと思いますが、削除する前にバージョンを確認した方がよかったですよ
あと、それがbrewで入れたものだったなら、brewを使わずに削除したら、brewが管理してるデータと矛盾するので、brewを使って削除すべきです
brewで入れたのではなく、ファイルの普通のコピーで「/usr/local/bin」に置いたのなら、普通に削除してかまいませんが
https://github.com/SergeyPirogov/webdriver_manager
の「With webdriver manager, you just need to do two simple steps:」と書いてあるところのちょっと下の「Use with Chrome:」のところに
driver = webdriver.Chrome(ChromeDriverManager().install())
と書く方法しか説明されてないのだから、毎回そのやり方で実行しないといけないのではないですかね
「webdriver_manager」が「chromedriver」を置いてる場所を探して、そこを環境変数PATHに追加したら、
driver = webdriver.Chrome(ChromeDriverManager().install())
を実行しなくても大丈夫になるかもしれませんが、
https://github.com/SergeyPirogov/webdriver_manager
にその方法の説明が無いので、その方法は「webdriver_manager」の作者が推奨する方法ではないのだろうと思います
何度もコメント頂きありがとうございます。
brew でインストールしていました。今回の削除はbrewで行っていなかったので今後は気を付けます。
brewコマンドでインストールをし直したら動くようになりました。
(コマンドで確認するとバージョンも最新になっていました。 /usr/local/bin/chromedriver --version
ChromeDriver 93.0.4577.63)
ありがとうございます。
driver = webdriver.Chrome(ChromeDriverManager().install())の更新はbrewでchromedriverをインストールしていた場合は効果がなく、毎回brewでアップデートする必要があるということでしょうか?
webdriver.Chrome(ChromeDriverManager().install())
とした時は、「webdriver_manager」が入れた「chromedriver」が使われます
「webdriver_manager」は、Chromeのバージョンに合わせたのを常に入れてくれるので、上記を実行した場合は問題ありません
「webdriver_manager」が入れた「chromedriver」を使いたければ、常に
webdriver.Chrome(ChromeDriverManager().install())
とする必要があります (brewで入れてるかどうかは関係無い)
webdriver.Chrome()
とした時は、「webdriver_manager」が入れた「chromedriver」は使われず、環境変数PATHで見つけた「chromedriver」があれば、それが使われます
元々「/usr/local/bin」に有ったのはバージョンが古かったのでエラーになり、この質問がされたわけですよね
それを削除したらPATH上に見つからないので、
> No such file or directory: 'chromedriver'
というエラーになりました
brewで新しいのを入れたら、Chromeのバージョンと合うので現状はうまく動きますが、その内にまた同じことになり、brewでアップデートすることになります
【追記】
webdriver.Chrome(ChromeDriverManager().install())
をやって、「webdriver_manager」が入れた新しい「chromedriver」を、次に
webdriver.Chrome()
をやった時に使えるようにするには、いくつか前のコメントに書いたように、「webdriver_manager」が「chromedriver」を置いてる場所を環境変数PATHに追加する必要があります
それをやらない場合は、何回
webdriver.Chrome(ChromeDriverManager().install())
をやろうが、
webdriver.Chrome()
はそれとは関係無いです
ブラウザを改めて開く動作を行うときに、webdriver.Chrome()としていたため環境PATHが必要になっていたということですね。
詳しく教えて頂き助かりました。
何か回答として記入して頂ければベストアンサーとさせて頂きます。
回答1件
あなたの回答
tips
プレビュー