私はプログラミングの初心者で、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
のパスを設定する必要があると思いますが、どうすればよいかわからないので、誰がどうすればこれができるのか教えてもらえますか?
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)
これで解決しました。
from Selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
このステップは、UbuntuのFirefox 50上で私のために解決しました。
ダウンロード geckodriver
/ usr/local/binにgeckodriverをコピーします。
追加する必要はありません
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
@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間のどんな矛盾も直すことができる十分な自信があるまで.
Homebrew がすでにインストールされているmacOSでは、Terminalコマンドを実行するだけです。
$ brew install geckodriver
自作はすでにPATH
を拡張しているので、起動スクリプトを変更する必要はありません。
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()
簡単な解決策は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スクリプトを実行できます。
このスレッドの将来の読者のためのいくつかの追加の入力/説明:
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
窓のための最も簡単な方法!
here から最新バージョンのgeckodriver(私はwin10を持っています)をダウンロードし、そのgeckodriver.exeファイルをpythonディレクトリC:\Users\my.name
(すでにPATHにあります)に追加しました私にとってはうまくいった!
私はWindows 10を使用しています、そしてこれは私のために働きました:
これは、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/
私は実際にあなたがシステムパスに入れずに最新の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')
Selenium/Pythonで公開されている書籍や、この問題に関するGoogleでのコメントのほとんどが、これをMac上で設定するためのパスロジックを明確に説明していないのは本当に悲しいことです(すべてはWindowsです!!!!)。 youtubesすべてはあなたがパス設定(私の心の中で、安価な方法!)を持っている "後"にピックアップしますそれで、あなたの素晴らしいMacユーザーのために、あなたのbashパスファイルを編集するために以下を使ってください:
> $ touch〜/ .bash_profile; open〜/ .bash_profile
それからこのようなパスを追加してください.... *#geckodriverのためのPATHの設定 PATH =“/usr/bin/geckodriver:$ {PATH}” export PATH
PATH =“〜/ユーザー/ yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/firefox /:$ {PATH}” export PATH
PATH =“ /ユーザー/ yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/common/service.py:$ {PATH}” export PATH *
これは私のために働きました。私の関心事は、いつSelenium Windowsコミュニティが本物のゲームをプレイし始め、私たちのMacユーザーを彼らの傲慢なクラブのメンバーにするかです。
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フォルダに移動してください。
Gecko Driverにアクセス ダウンロードセクションからgeckoドライバのURLを入手してください。
このリポジトリのクローンを作成します https://github.com/jackton1/script_install.git
cd script_install
実行する
./installer --gecko-driver url_to_gecko_driver
私はWindows 10とAnaconda 2を使っています。システムパス変数を設定しようとしましたが、うまくいきませんでした。それから私は単にAnaconda2/Scriptsフォルダにgeckodriver.exeファイルを追加し、そしてすべてが今素晴らしい仕事をしています。
C:\ Users\Bhavya\Anaconda2\Scripts
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
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"):
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 ではありません。