概要
chromedriverを無事インストール出来て、seleniumを使ってプログラムの動作テストを行った処、以下のエラーで悩まされました。
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
google翻訳のところ
selenium.common.exceptions.WebDriverException:Message:「chromedriver」実行可能ファイルはPATHに含まれている必要があります。 https://sites.google.com/a/chromium.org/chromedriver/homeをご覧くださいということで、
これはchromedriverの実行ファイルまでのパスを通して下さいというエラーメッセージらしいです。
folderの検索窓に「chromedriver」を記述して検索しても、あるのは「chromedriver.rb」だけで、「chromedriver」は見つかりませんでした。
driverの場所が探せなくて苦労してググている時、このリンクで教えてもらいました。
「Python/ChromeDriverインストールとパスの通し方」
https://watlab-blog.com/2019/08/10/chromedriver-path/
※ちなみに、解決策2の「pip install chromedriver-binary-auto」については、実施していません。(解決策1で対処した為です)
これであっという間に解決しました。!!感謝を込めて記録しておこうと思います。
構築環境
・macos Ventura 13.2
・Python 3.10.4
・機種名: iMac18,3
・selenium 4.11.2
Google Chromeのインストール
まずは、Google Chromeをインストール
<参考>
Google Chrome をダウンロードしてインストールする
https://support.google.com/chrome/answer/95346?hl=ja&co=GENIE.Platform%3DDesktop
pipでseleniumおよびchromedriver-binaryをインストール
次にseleniumモジュールとchromedriver-binaryモジュールをインポートします。
$ python3 -m pip install selenium
$ python3 -m pip install chromedriver-binary # (※1)パスを通すためのコード
<参考>
「Pythonのpipコマンドでうまくパッケージがインストールできない場合がある理由と対処法」
https://news.mynavi.jp/article/zeropython-77/
検証
これで、下のテストを行ったところ無事に動きました。
決め手は、import chromedriver_binary でした。
#tast_program.py
from selenium import webdriver
# find_element() メソッドを呼び出す際に要素を見つける方法を指定するために使用
from selenium.webdriver.common.by import By
# 要素が特定の条件を満たすまで待機するために使用
from selenium.webdriver.support.ui import WebDriverWait
# WebDriverWait と組み合わせて、要素が特定の条件を満たすまで待機するために使用
from selenium.webdriver.support import expected_conditions
# Serviceクラスは、ブラウザのドライバーを実行するためのサービスを管理するためのクラス
# 通常、直接使用することはありませんが、カスタム設定が必要な場合に便利
from selenium.webdriver.chrome.service import Service as ChromeService
# -----------------------------------------------------------
import time
# -----------------------------------------------------------
# Chromedriverを簡単にインストール・管理できるようにするためのパッケージ
#Driverの場所:/Users/xxxxxxxx/(以下隠しファイル).pyenv/versions/3.10.4/lib/python3.10/site-packages/chromedriver_binary
import chromedriver_binary
# Chromedriverを使用してChromeブラウザを起動
driver = webdriver.Chrome()
# -------------------------------------------------------------
# ヘッドレスモード設定
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver.get('https://google.com')
# ------------------------------------------------------
# 検索文字を入力するためのxpath
xpath = '//*[@id="APjFqb"]'
search = "python"#input('検索する内容:')
# タイムアウトを10秒に設定
wait = WebDriverWait(driver, 10)
# 検索文字列を入力
input = driver.find_element(By.XPATH,xpath)#<-selenium3以降
input.send_keys(search + 'について')
input.submit()
# すべてのページが表示されるまで2秒待機
time.sleep(2)
#ターミナルへ表示
for elem_h3 in driver.find_elements(By.XPATH,'//a/h3'):
elem_a = elem_h3.find_element(By.XPATH,'..')
print(elem_h3.text)
print(elem_a.get_attribute('href'))
print('')
print('-'*50)
# このドライバを終了し、開かれていたすべての関連ウィンドウを閉じる
driver.quit()
追記
(「PATH で検出された chromedriver バージョン (xxx.x.xxxx.xxx) は、検出された chrome バージョン (xxx.x .xxxx.xxx)) と互換性がない可能性があります。」とfメッセージが表示された場合の対応)
(メッセージの例)
The chromedriver version (115.0.5790.102) detected in PATH at /Users/xxxxxxxx/.pyenv/versions/3.10.4/lib/python3.10/site-packages/chromedriver_binary/chromedriver might not be compatible with the detected chrome version (115.0.5790.170); currently, chromedriver 115.0.5790.170 is recommended for chrome 115.*, so it is advised to delete the driver in PATH and retry
”PATH で検出された chromedriver バージョン (115.0.5790.102) は、検出された chrome バージョン (115.0.5790.170) と互換性がない可能性があります。; 現在、Chrome 115.* には chromedriver 115.0.5790.170 が推奨されているため、PATH 内のドライバーを削除して再試行することをお勧めします。”
(対応)
上記サイトからGoogleChromrのバージョンに近いバージョン選択してpipインストールする!
(例)
pip install chromedriver-binary==115.0.5790.170.0
(具体的手順)
1,「GoogleChriome」の右上の3つの点をクリック ー 設定をクリック ー Chromeについて をクリック
2,https://pypi.org/project/chromedriver-binary/#history
を開き、リリース履歴をスクロールして、上記のGoogleChromeのバージョンに近いバージョン(xxx.x.xxxxまででいいみたい)を探しクリックする
3,クリップビードにコピーをクリックして、ターミナルなどに貼り付けてインストールする。
4,pip listで変更を確認する。
以上です。