先日Pythonでスクレイピングする時に使うwebdriver.Chromeコマンドを実行したらエラーを吐かれました。
これまでは問題なく通っていたので混乱しましたが、解決策を見つけたので同じエラーに遭遇した人用に記録として残しておきます。
エラー状況と原因
エラー状況
いつものようにスクレイピングをするためのプログラムを実行したところ、以下のようなエラーを吐かれました。
from selenium import webdriver
driver_path = '/Users/ユーザー名/Documents/Programming/Python/chromedriver'
driver = webdriver.Chrome(driver_exe)
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain chromedriver using Selenium Manager; ‘str’ object has no attribute ‘capabilities’; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location
エラー内容を見てみると、chromedriverを取得できない云々と書いてあります。
原因
エラー内容について調べてみると、どうやらseleniumのバージョンを上げたことが原因のようです。
seleniumのバージョン4.6.0以降、seleniumをインストールするとSelenium Managerなるライブラリが一緒にインストールされるようです。
そのためselenium 4.6.0以降をプログラム中でインポートすると、従来のようにChromeのドライバが置かれているファイルパスを指定する必要が無くなります。
逆に言えば指定する必要が無いのに勝手にファイルパスを引数として与えたため、上記のようなエラーを吐いたわけです。
解決策
ここまでの内容を踏まえると、解決策としては2通りの方法が考えられます。
1.コードの書き換え(オススメ)
Selenium Managerが自動でWebドライバを起動してくれるので、エラーを吐いた先述のコードを以下のように書き換えるだけでエラーが消えます。
from selenium import webdriver
driver = webdriver.Chrome()
こちらの方がコードもスッキリする上にドライバのバージョン等を考えなくて済むのでオススメです。
2.seleniumのバージョンを下げる
seleniumのバージョンを下げることでコードの書き換えをすることなくエラーを消すことができます。
例えばseleniumのバージョンを4.1.0に下げる場合は以下のコマンドを入力すれば実現できます。
#seleniumのアンインストール
pip uninstall selenium
#selenium 4.1.0のインストール
pip install selenium==4.1.0
これまで作成したスクレイピングのプログラムを書き直すのが面倒くさいという人はこちらの方法をお試しください。
まとめ
今回はseleniumライブラリのwebdriver.Chromeコマンドのエラーについて、原因と解決策についてまとめました。
この記事で不明な点や気になるところがあれば下のコメント欄までお願いします。それではまた!
コメント
コメント一覧 (7件)
너무 감사합니다 덕분에 몇 시간 동안 해결 못하고 있던 오류를 해결하였습니다!
コメントありがとうございます!お役に立てて嬉しいです!!
from selenium import webdriver
driver = webdriver.Chrome()
を実行すると 下記エラーが出てうまくいきません.どこがおかしいのでしょうか?
なおSeleniumのバージョンは4.1.0です.
Traceback (most recent call last):
File “D:\python_prg\from selenium import webdriver.py”, line 3, in
driver = webdriver.Chrome()
File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chrome\webdriver.py”, line 70, in __init__
super(WebDriver, self).__init__(DesiredCapabilities.CHROME[‘browserName’], “goog”,
File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chromium\webdriver.py”, line 93, in __init__
RemoteWebDriver.__init__(
File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 268, in __init__
self.start_session(capabilities, browser_profile)
File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 359, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 424, in execute
self.error_handler.check_response(response)
File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\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: Failed to create Chrome process.
Stacktrace:
Backtrace:
GetHandleVerifier [0x00007FF7A4774A62+57106]
(No symbol) [0x00007FF7A46ECF52]
(No symbol) [0x00007FF7A45BE2CB]
(No symbol) [0x00007FF7A45E4C5B]
(No symbol) [0x00007FF7A45E30AA]
(No symbol) [0x00007FF7A461E3F7]
(No symbol) [0x00007FF7A461DF60]
(No symbol) [0x00007FF7A4616793]
(No symbol) [0x00007FF7A45ECE81]
(No symbol) [0x00007FF7A45EE064]
GetHandleVerifier [0x00007FF7A4A24222+2873042]
GetHandleVerifier [0x00007FF7A4A76590+3209792]
GetHandleVerifier [0x00007FF7A4A6F3AF+3180639]
GetHandleVerifier [0x00007FF7A4805F25+652245]
(No symbol) [0x00007FF7A46F8618]
(No symbol) [0x00007FF7A46F47C4]
(No symbol) [0x00007FF7A46F48BC]
(No symbol) [0x00007FF7A46E4C33]
BaseThreadInitThunk [0x00007FFE91487614+20]
RtlUserThreadStart [0x00007FFE92B826B1+33]
ご質問ありがとうございます。
掲載していただいた内容を見るに、seleniumのバージョンがエラー原因だと考えられます。
コード2行目のdriver = webdriver.Chrome()というコードはselenium ver.4.6.0以降でないと使うことができません。
そのためseleniumを最新バージョンにアップデートすることでエラーを消すことができるはずです。下記コマンドをターミナルに入力してseleniumをアップデートした上で再度実行してみてください。
コマンド:pip install -U selenium
上記手順を踏んでもエラーが解決しない場合は遠慮なくお尋ねください。
早速回答,ありがとうございます.
seleniumをアップデートして確かにエラーは出なくなり,driver.get()でHPのページが表示されました. ただdriver.find_element_by_xpath(‘/html/….’).click()で下記エラーが出力,
今まで出来ていたfind_element_by_xpathは使えなくなったのでしょうか
AttributeError: ‘WebDriver’ object has no attribute ‘find_element_by_xpath’
質問前に自分で調べないといけませんね.
find_elementの記述は確かに変更されていて find_element_by_xpathは find_element(By,XPAH,…になっていました.
お手数をおかけしました.
エラーが出なくなったようで良かったです。
仰る通り、find_element_by系メソッドはselenium 4.3.0以降で非推奨となりました。(参考記事:https://edaha-room.com/python_selenium_find_element_by_rewrite/2027/)
これまでと同じコードで動かしたい場合はseleniumを4.1.0にダウングレードした上で以下の手順を踏んでください。(Windowsの場合です。Macなどは適宜読み替えていただけると幸いです。)
1.ダウンロードページ(https://chromedriver.chromium.org/downloads)から最新バージョンのchromedriver_win32.zipをダウンロードする
2.chromedriver_win32.zipを展開し、フォルダ内にあるchromedriver.exeをCドライブ直下に置く
3.driver = webdriver.Chrome(“C:/chromedriver.exe”)にコードを書き換える
※chromedriverがアップデートされる度に都度、最新バージョンをインストールする必要があるかもしれません(未検証)