web-dev-qa-db-ja.com

Selenium in Python-Geckodriver実行可能ファイルはPATHにある必要があります

私はプログラミングの初心者で、Python=約2か月前に開始し、SweigartのAutomate the Boring StuffでPython text。Spyderを使用しています。 3、すでにSeleniumモジュールとFirefoxブラウザがインストールされています。pythonファイルで次のコードを使用しました

from Selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://inventwithpython.com')

私はこのエラーを受け取ります:

Message: 'geckodriver' executable needs to be in PATH.

ターミナルに移動してインストールすることに加えて、geckodriver.exeをダウンロードしました。

brew install geckodriver

奇妙なことに、ターミナルに移動して「python」と入力してからコードを入力すると動作しますが、Spyderでファイルを実行すると動作しません。 geckodriver.exeファイルを機能させるにはどこに置く必要がありますか?私はそれをさまざまなフォルダ(pythonファイル、webdriverファイルと同じフォルダ、ユーザービンなど)と同じフォルダ)に入れようとしましたが、同じエラーが発生します

私は同様の質問を見てきましたが、うまくいくものを見つけることができないようです。また、Chromeで試しましたが、chromedriverで同じエラーが発生します。

which geckodriver

/usr/local/bin/geckodriver

私もMacを使用しているので、ファイルパスはWindowsよりも少し難しいです。

8
user4389863

解決済み:geckodriver exeを/ Users/sethkillian/anaconda/binに配置しましたが、Spyderで問題なく動作するようになりました。助けてくれてありがとう!

3
user4389863

Geckodriverをダウンロードして、/ usr/local/binに入れます。次に、webdriver.Firefoxを次のように使用します。

from Selenium import webdriver
driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver')
14
JJon.Boat

おそらく、パスが見つからない理由を誰かが説明できるでしょう。また、他の誰かが自分のパスの問題をトラブルシューティングするのに役立つことを願っています。

確かに、geckodriverを実行可能な場所に配置できます。私のMacでは、〜/ .local/binを選択しました。これは、ユーザーアカウントに固有の実行可能ファイルが保存される一般的な場所だからです。例えば。 Heroku CLIは〜/ .local/shareに配置されます。また、このアプローチにより、/ usr/local/binなどのシステムの場所に実行可能ファイルを追加するときに、スーパーユーザーがアクセスする必要がなくなります。

次に、.profile内のパスにそれを追加しました

    EXPORT PATH=$PATH:~/.local/bin

ターミナルを開いて確認してテストしました:

    geckodriver --version

うまくいきました。

しかし、Python仮想環境から、何らかの理由でシステムパスが渡されませんか??

    import sys

    for p in sys.path:
        print(p)

示したもの:

    /Users/philip/Devel/myproject
    /Users/philip/.virtualenvs/myproject/lib/python36.Zip
    /Users/philip/.virtualenvs/myproject/lib/python3.6
    /Users/philip/.virtualenvs/myproject/lib/python3.6/lib-dynload
    /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6
    /Users/philip/.virtualenvs/myproject/lib/python3.6/site-packages

そのため、最終的には次のようにパスを指定する必要がありました。

    self.browser = webdriver.Firefox(executable_path=r'/Users/philip/.local/bin/geckodriver')

このアプローチはうまく機能しますが、仮想環境でパスを設定できなかった理由を知りたいです。

1
Philip