1. ホーム
  2. python

[解決済み】Pythonを使用したSelenium - Geckodriverの実行ファイルがPATHにある必要があります。

2022-02-02 04:53:28

質問事項

私はプログラミングの初心者で、2ヶ月ほど前にPythonを始め、Sweigartの Pythonで退屈なことを自動化する のテキストをご覧ください。私が使っているのは IDLE で、SeleniumモジュールとFirefoxブラウザをインストール済みです。

webdriverの機能を実行しようとすると、必ずこのようになります。

from selenium import webdriver
browser = webdriver.Firefox()

例外です。

Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
    self.stop()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
    self.stop()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
    stdout=self.log_file, stderr=self.log_file)
  File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    browser = webdriver.Firefox()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
    self.service.start()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

のパスを設定する必要があるかと思います。 geckodriver しかし、どのようにすればよいのでしょうか?

どのように解決するのですか?

<ブロッククオート

selenium.common.exceptions.WebDriverException: メッセージ 'geckodriver' 実行ファイルが PATH にある必要があります。

まず最初に、Selenium を使って最新の Firefox を動かすために、最新の実行ファイル geckodriver をここからダウンロードする必要があります。

実は、Seleniumクライアントのバインディングは geckodriver 実行ファイルをシステムから PATH . 実行ファイルを含むディレクトリをシステムパスに追加する必要があります。

  • Unixシステムでは、Bash互換のシェルを使用している場合、次のようにしてシステムの検索パスに追加することができます。

      export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
    
    
  • Windowsでは Path システム変数に、実行ファイル geckodriver のフルディレクトリのパスを追加します。 手動 または コマンドライン ** (実行ファイル geckodriver をシステムの PATH に追加した後、システムを再起動することを忘れないでください。) **. 原理は Unix と同じです。

これで、以下のようにコードを実行できるようになりました :-)

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException: メッセージ ブラウザのバイナリロケーションを期待しましたが、デフォルトのロケーションでバイナリが見つからず、'moz:firefoxOptions.binary' capability が提供されず、コマンドラインでもバイナリフラグが設定されていません。

この例外は、Selenium が Firefox を見つけてデフォルトの場所から起動しようとしているときに、あなたが他の場所に Firefox をインストールしたことを明確に示していますが、見つけることができませんでした。以下のように、Firefoxを起動するために、Firefoxのインストールされたバイナリロケーションを明示的に提供する必要があります:-)

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)

https://github.com/mozilla/geckodriver/releases

Windowsの場合。

GitHubからファイルをダウンロードし、解凍してPythonファイルに貼り付けます。私はこれでうまくいきました。

https://github.com/mozilla/geckodriver/releases

私の場合、パスパスは

C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39