web-dev-qa-db-ja.com

Pythonを使用したSelenium - Geckodriverの実行ファイルはPATHにある必要があります

私はプログラミングの初心者で、2か月ほど前にPythonを始めました。そして、Sweigartの Pythonを使ったボーリング作業の自動化 textを読み進めます。私は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のパスを設定する必要があると思いますが、どうすればよいかわからないので、誰がどうすればこれができるのか教えてもらえますか?

306
tadm123

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'機能が提供されていない、コマンドラインでバイナリフラグが設定されていない

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)
264
Saurabh Gaur

これで解決しました。

from Selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
92
Nesa

このステップは、UbuntuのFirefox 50上で私のために解決しました。

  1. ダウンロード geckodriver

  2. / usr/local/binにgeckodriverをコピーします。

追加する必要はありません 

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
91

@saurabhによる答えは問題を解決しますが、なぜ Pythonでボーリングスタッフを自動化する にこれらのステップが含まれていないのか説明していません。

これは、本がSelenium 2.xをベースにしており、そのシリーズのFirefoxドライバがgeckoドライバを必要としないことが原因です。 Seleniumの開発中は、ブラウザを駆動するためのGeckoインタフェースは利用できませんでした。

Selenium 2.xシリーズの 最新バージョン は2.53.6です(バージョンの見やすさのために、例えば この回答 をご覧ください)。

2.53.6 version page はgeckoについては全く言及していません。しかしバージョン3.0.2以降のドキュメントでは{ 明示的に述べています あなたはgeckoドライバをインストールする必要があります。

アップグレード後(または新しいシステムにインストールした後)、以前に(または古いシステムに)問題なく動作していたソフトウェアが動作しなくなり、急いでいる場合は、Seleniumバージョンをvirtualenvに固定してください。

pip install Selenium==2.53.6

しかし、もちろん開発のための長期的な解決策は、最新バージョンのSeleniumで新しいvirtualenvをセットアップし、geckoドライバをインストールし、それでもすべてが期待通りに動作するかどうかをテストすることです。しかし、メジャーバージョンバンプはあなたの本で扱われていない他のAPI変更を導入するかもしれません、それであなたがあなた自身がSelenium2とSelenium3 API間のどんな矛盾も直すことができる十分な自信があるまで.

25
Anthon

Homebrew がすでにインストールされているmacOSでは、Terminalコマンドを実行するだけです。

$ brew install geckodriver

自作はすでにPATHを拡張しているので、起動スクリプトを変更する必要はありません。

13
roskakori

Selenium Python用のgeckodriverをセットアップするには} _

下記のようにFirefoxDriverでgeckodriverのパスを設定する必要があります。

self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')

適切なOS用のgeckodriverをダウンロードしてください( https://github.com/mozilla/geckodriver/releases から) - >それをあなたの選んだフォルダに展開してください - >上記のように正しくパスを設定

Windows 10ではPython 3.6.2とSelenium WebDriver 3.4.3を使用しています。

geckodriverを設定するもう一つの方法:

i)geckodriver.exeを/ Python/Scripts /の下に貼り付けるだけです(私の場合はC:\ Python36\Scripts)。
ii)以下のように簡単なコードを書きます。

self.driver = webdriver.Firefox()
12
Ripon Al Wasim

MACの手順

簡単な解決策はGeckoDriverをダウンロードしてあなたのシステムのPATHに追加することです。 2つの方法のどちらかを使用できます。

ショートメソッド:

1) Geckodriver をダウンロードして解凍します。

2)ドライバを起動している間にパスを指定します。

driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')

ロングメソッド:

1) Geckodriver をダウンロードして解凍します。

2).bash_profileを開きます。まだ作成していない場合は、コマンドtouch ~/.bash_profileを使用して作成できます。それからそれを使ってそれを開きます:open ~/.bash_profile

3)GeckoDriverファイルがDownloadsフォルダにあると考えると、.bash_profileファイルに次の行を追加することができます。

PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH

これによってあなたはあなたのシステムパスにGeckoDriverへのパスを追加しています。これは、Seleniumスクリプトを実行するときにGeckoDriverがどこにあるのかをシステムに知らせます。 

4).bash_profileを保存して強制的に実行します。これにより、再起動しなくてもすぐに値がロードされます。これを行うには、次のコマンドを実行します。

source ~/.bash_profile

5)それで終わりです。あなたは終わりました!これでPythonスクリプトを実行できます。

5
Umang Sardesai

このスレッドの将来の読者のためのいくつかの追加の入力/説明:

Windows 7、Python 3.6、Selenium 3.11の解決策としては、以下のもので十分です。

Unix用のこのスレッドにおける@ dsalajのメモは、Windowsにも適用できます。 PATH環境に手を加えるWindowsレベルでの変数やWindowsシステムの再起動を避けることができます。

(1)geckodriverをダウンロードし(先のこのスレッドで説明したように)、(解凍された)geckdriver.exeをX:\ Folder\of\your\choiceに置きます。

(2)Pythonコードサンプル:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from Selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

注:(1)上記のコードが指定のURLでFirefoxブラウザを開くのに約10秒かかります。
(2)指定されたURLでサーバーを実行していないか、タイトルに文字列 'Django'を含むページを提供しているサーバーが存在しない場合、pythonコンソールに次のエラーが表示されます。 .WebDriverException:メッセージ:エラーページに到達しました:about:neterror?e = connectionFailure&u = http%3A // localhost%3A8000 /&c = UTF-8&f =通常の&d = Firefox%20can%E2%80%9

5
Snidhi Sofpro

窓のための最も簡単な方法!
here から最新バージョンのgeckodriver(私はwin10を持っています)をダウンロードし、そのgeckodriver.exeファイルをpythonディレクトリC:\Users\my.name(すでにPATHにあります)に追加しました私にとってはうまくいった!

4
Jalles10

私はWindows 10を使用しています、そしてこれは私のために働きました:

  1. Geckodriverを here からダウンロードしてください。使用しているコンピュータに適したバージョンをダウンロードする
  2. ダウンロードしたファイルを解凍し、そこに含まれている「.exe」ファイルをカット/コピーします。
  3. C:{あなたのPythonルートフォルダ}に移動します。私のはC:\ Python27でした。このフォルダにgeckodriver.exeファイルを貼り付けます。
  4. 開発環境を再起動してください。
  5. もう一度コードを実行してみてください、それは今動作するはずです。
3
anotherNoob

Anaconda を使用している場合は、仮想環境をアクティブにしてから、次の コマンド を使用して geckodriver をインストールするだけです。

    conda install -c conda-forge geckodriver
3
Rodolfo Alvarez

Ubuntu 18.04+およびgeckodriverの最新リリース

これは、Mac、または他の* nix品種でも機能するはずです。

export GV=v0.24.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz 
chmod +x geckodriver
Sudo cp geckodriver /usr/local/bin/
3
jmunsch

私は実際にあなたがシステムパスに入れずに最新のgeckodriverを使うことができることを発見しました。現在使っています 

https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.Zip

Firefox 50.1.0

Python 3.5.2 

セレン3.0.2

ウィンドウズ10

私はVirtualEnvを使っています(これはPyCharmを使って管理しています。Pipを使ってすべてをインストールしていると思います)。

次のコードでは、executable_pathパラメータを使ってgeckodriverの特定のパスを使うことができます(これは、[\。Lib\site-packages\Selenium\webdriver\firefox\webdriver.py]を見ればわかります)。注意Webドライバを呼び出すときのパラメータ引数の順序が重要であるとの疑いがあります。そのため、executable_pathはコードの最後(最後から2番目の行の右端)になります。

あなたがテストしているサイトが信頼できない証明書を持っているならばあなたが遭遇するsec_error_unknown_issuer問題を回避するために私がカスタムFirefoxプロファイルを使用することに気づくかもしれません。 Seleniumを使用してFirefoxの信頼できない接続に関する警告を無効にするにはどうすればいいですか?

調査の結果、Marionetteドライバは不完全でまだ進行中で、証明書を却下または設定するためのさまざまな機能やプロファイルオプションの設定は機能しないことが判明しました。そのため、カスタムプロファイルを使用する方が簡単でした。 

とにかく、ここに私が道にいなくてもどうやってgeckodriverを動かすことができたかに関するコードがあります:

from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True

#In the next line I'm using a specific FireFox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a FireFox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager

ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')
3
Roochiedoor

Selenium/Pythonで公開されている書籍や、この問題に関するGoogleでのコメントのほとんどが、これをMac上で設定するためのパスロジックを明確に説明していないのは本当に悲しいことです(すべてはWindowsです!!!!)。 youtubesすべてはあなたがパス設定(私の心の中で、安価な方法!)を持っている "後"にピックアップしますそれで、あなたの素晴らしいMacユーザーのために、あなたのbashパスファイルを編集するために以下を使ってください:

> $ touch〜/ .bash_profile; open〜/ .bash_profile

それからこのようなパスを追加してください.... *#geckodriverのためのPATHの設定 PATH =“/usr/bin/geckodriver:$ {PATH}” export PATH

Selenium FirefoxのPATHを設定する

PATH =“〜/ユーザー/ yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/firefox /:$ {PATH}” export PATH

Firefoxドライバの実行ファイルにPATHを設定する

PATH =“ /ユーザー/ yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/common/service.py:$ {PATH}” export PATH *

これは私のために働きました。私の関心事は、いつSelenium Windowsコミュニティが本物のゲームをプレイし始め、私たちのMacユーザーを彼らの傲慢なクラブのメンバーにするかです。

2
JustASteve

SeleniumはDESCRIPTION.rstでこの質問に答えています

Drivers
=======

Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it's in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.

Failure to observe this step will give you an error `Selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

基本的にはgeckodriverをダウンロードし、解凍して実行ファイルをあなたの/ usr/binフォルダに移動してください。

2
Peter Graham

Gecko Driverにアクセス ダウンロードセクションからgeckoドライバのURLを入手してください。

このリポジトリのクローンを作成します https://github.com/jackton1/script_install.git

cd script_install

実行する

./installer --gecko-driver url_to_gecko_driver

0
jackotonye

私はWindows 10とAnaconda 2を使っています。システムパス変数を設定しようとしましたが、うまくいきませんでした。それから私は単にAnaconda2/Scriptsフォルダにgeckodriver.exeファイルを追加し、そしてすべてが今素晴らしい仕事をしています。

C:\ Users\Bhavya\Anaconda2\Scripts

0
Bhavya Ghai

Windows 10にドライバパスを追加したい場合は、

  1. 「このPC」アイコンを右クリックして「プロパティ」を選択してください enter image description here

  2. 「システムの詳細設定」をクリックしてください。

  3. 画面下部の「環境変数」をクリックしてください。
  4. 「ユーザー変数」セクションで「パス」を強調表示し、「編集」をクリックします。
  5. 「新規」をクリックして、追加するドライバのパスを入力してEnterキーを押すことで、変数にパスを追加します。
  6. パスを入力したら、[OK]をクリックします
  7. すべての画面を閉じるまで、[OK]をクリックし続けます。
0
Russ Thomas

Mac 10.12.1 python 2.7.10 これは私のための作業です:)

def download(url):
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
browser = webdriver.Firefox(capabilities=firefox_capabilities,
                            executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
browser.get(url)
return browser.page_source
0
do01

Raspberry Piでは、ARMドライバから作成し、geckodriverとログインパスを設定する必要がありました。 

Sudo nano /usr/local/lib/python2.7/dist- packages/Selenium/webbriver/firefox/webdriver.py

def __init__(self, firefox_profile=None, firefox_binary=None,
             timeout=30, capabilities=None, proxy=None,
             executable_path="/PATH/gecko/geckodriver",                     
firefox_options=None,
             log_path="/PATH/geckodriver.log"):
0
Nathan Gisvold

Windowsユーザーの場合

元のコードをそのまま使用します。

from Selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")

それからドライバを以下からダウンロードしてください: mozilla/geckodriver

一例として、固定パスに(恒久的に)配置します。

C:\ Python35

それからシステムの環境変数に行き、 "システム変数"のグリッドでPath変数を探して、追加します。

; C:\ Python35\geckodriver

geckodriver、 geckodriver.exe ではありません。

0
Ghanem