Sélénium en utilisant l'exécutable Python-Geckodriver doit être dans le chemin

je suis nouveau dans la programmation et j'ai commencé avec Python il y a environ 2 mois et je vais sur le de Sweigart automatiser les trucs ennuyeux avec le texte de Python . J'utilise IDLE et j'ai déjà installé le module sélénium et le navigateur Firefox. Chaque fois que j'ai essayé d'exécuter la fonction webdriver, je reçois ceci:

from selenium import webdriver
browser = webdriver.Firefox()

Exception: -

Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 163, in __del__
    self.stop()
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.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:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 163, in __del__
    self.stop()
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 64, in start
    stdout=self.log_file, stderr=self.log_file)
  File "C:PythonPython35libsubprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "C:PythonPython35libsubprocess.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:PythonPython35libsite-packagesseleniumwebdriverfirefoxwebdriver.py", line 135, in __init__
    self.service.start()
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.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. 

je pense que j'ai besoin de définir le chemin pour geckodriver mais pas sûr comment, donc quelqu'un peut me dire comment faire?

270
demandé sur Paolo Forgia 2016-10-24 00:39:13

18 réponses

de sélénium.commun.exception.WebDriverException: Message: l'exécutable 'geckodriver' doit être dans le chemin.

tout d'abord, vous aurez besoin de télécharger la dernière exécutable geckodriver à partir d'ici pour exécuter la dernière firefox en utilisant le sélénium

en fait, le client Selenium essaie de localiser l'exécutable geckodriver du système PATH . Vous devrez ajouter le répertoire contenant l'exécutable vers le chemin du système.

  • sur les systèmes Unix, vous pouvez faire ce qui suit pour l'ajouter au chemin de recherche de votre système, Si vous utilisez un shell compatible bash:

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
    
  • sous Windows, vous devrez mettre à jour la variable de système de chemin pour ajouter le chemin de répertoire complet à l'exécutable geckodriver manuellement ou ligne de commande (n'oubliez pas de redémarrer votre système après avoir ajouté l'exécutable geckodriver dans le chemin du système pour prendre effet) . Le principe est le même que sur Unix.

Maintenant vous pouvez exécuter votre code comme vous le faites ci-dessous: -

from selenium import webdriver

browser = webdriver.Firefox()

de sélénium.commun.exception.WebDriverException: Message: emplacement binaire attendu du navigateur, mais incapable de trouver binaire par défaut l'emplacement, pas de " moz:firefoxOptions.capacité binaire ' fournie, et aucun drapeau binaire fixé sur la ligne de commande

Exception indique clairement que vous avez installé firefox un autre emplacement pendant que Selenium essaie de trouver firefox et de lancer à partir de l'emplacement par défaut, mais il n'a pas pu trouver. Vous devez fournir explicitement l'emplacement binaire installé par firefox pour lancer firefox comme suit : -

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)
234
répondu Saurabh Gaur 2016-10-24 03:12:12

cette étape résolue pour moi sur ubuntu firefox 50.

  1. télécharger geckodriver

  2. Copie geckodriver dans /usr/local/bin

vous N'avez pas besoin d'ajouter

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
80
répondu Andrea Perdicchia 2017-02-10 17:29:03

ça m'a résolu le problème.

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
79
répondu Nesa 2017-02-08 19:45:54

la réponse de @saurabh résout le problème, mais n'explique pas pourquoi automatise les trucs ennuyeux avec Python n'inclut pas ces étapes.

Ceci est causé par le livre étant basé sur le sélénium 2.x et le pilote Firefox pour cette série n'a pas besoin du pilote gecko. L'interface Gecko pour piloter le navigateur n'était pas disponible au moment du développement de selenium.

la dernière version dans le le sélénium 2.la série x est 2.53.6 (voir e.g cela répond , pour une meilleure visibilité sur les versions).

Le 2.53.6 page de la version ne parle pas de gecko. Mais depuis la version 3.0.2 la documentation indique explicitement vous devez installer le pilote gecko.

si après une mise à niveau (ou une installation sur un nouveau système), votre logiciel qui a fonctionné correctement avant (ou sur votre ancien système) ne travailler plus et vous êtes pressé, épingler la version sélénium dans votre virtualenv en faisant

pip install selenium==2.53.6

mais bien sûr la solution à long terme pour le développement est de configurer un nouveau virtualenv avec la dernière version de sélénium, installer le pilote gecko et tester si tout fonctionne toujours comme prévu. Mais le bump de version majeure pourrait introduire d'autres changements D'API qui ne sont pas couverts par votre livre, donc vous pourriez vouloir s'en tenir à l'ancien sélénium, jusqu'à ce que vous êtes sûr assez pour que vous puissiez corriger vous-même toute divergence entre l'API selenium2 et selenium3.

21
répondu Anthon 2017-05-23 12:18:27

sur macOS avec Homebrew déjà installé, vous pouvez simplement exécuter la commande du Terminal

$ brew install geckodriver

parce que homebrew a déjà étendu le PATH il n'y a pas besoin de modifier les scripts de démarrage.

12
répondu roskakori 2017-09-03 14:09:56

pour configurer geckodriver pour le python de sélénium:

il doit définir geckodriver path avec FirefoxDriver comme code ci-dessous:

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

télécharger geckodriver pour votre système d'exploitation approprié (à partir de https://github.com/mozilla/geckodriver/releases ) - > L'extraire dans un dossier de votre choix -> définir le chemin correctement comme indiqué ci-dessus

j'utilise Python 3.6.2 et Selenium WebDriver 3.4.3 sous Windows 10.

une autre façon de configurer geckodriver:

I) simplement coller le geckodriver.exe under/Python/ Scripts / (dans mon cas, le dossier était: C:\Python36\Scripts)

ii) écrivez maintenant le code simple comme suit:

self.driver = webdriver.Firefox()
9
répondu Ripon Al Wasim 2017-07-26 11:33:48

Étapes pour MAC:

la solution simple est de télécharger GeckoDriver et de l'ajouter à votre chemin système. Vous pouvez utiliser l'un des deux approches:

Méthode Courte:

1) Téléchargez et décompressez Geckodriver .

2) mentionner le chemin en initialisant le pilote:

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

Méthode Longue:

1) Télécharger et décompresser Geckodriver .

2) Ouvert .bash_profile . Si vous n'avez pas encore créé, vous pouvez le faire en utilisant la commande: touch ~/.bash_profile . Puis ouvrez-le en utilisant: open ~/.bash_profile

3) considérant que le fichier GeckoDriver est présent dans votre dossier Téléchargements, vous pouvez ajouter la(Les) ligne (s) suivante (s) au fichier .bash_profile :

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

par ceci vous ajoutez le chemin vers GeckoDriver à votre chemin système. Ceci dit l' système où GeckoDriver est situé lors de l'exécution de vos scripts de sélénium.

4) sauvegardez le .bash_profile et forcez-le à s'exécuter. Cette charge les valeurs immédiatement sans avoir à redémarrer. Pour ce faire, vous pouvez exécuter la commande suivante:

source ~/.bash_profile

5) C'est ça. Vous avez TERMINÉ!. Vous pouvez lancer le script Python maintenant.

5
répondu Umang Sardesai 2017-02-18 09:52:51

j'ai découvert que vous pouvez utiliser le dernier geckodriver sans le mettre dans le chemin du système. Actuellement j'utilise

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

Firefox 50.1.0

Python 3.5.2

sélénium 3.0.2

Windows 10

je suis à court d'un VirtualEnv (que je gère en utilisant PyCharm, je suppose Qu'il utilise Pip pour tout installer)

dans le code suivant, je peux utiliser un chemin spécifique pour le geckodriver en utilisant le paramateur_path exécutable (Je l'ai découvert en regardant dans Lib\site-packages\selenium\webdriver\firefox\webdriver.py ). Notez que je soupçonne que l'ordre des arguments des paramètres lors de l'appel du webdriver est important, c'est pourquoi l'exécutable_path est dernier dans mon code (2ème dernière ligne à l'extrême droite))

vous pouvez aussi remarquer que j'utilise un profil firefox personnalisé pour contourner le problème sec_error_unknown_issuer que vous rencontrerez si le site que vous testez possède un certificat non fiable. voir comment désactiver L'avertissement de connexion non fiable de Firefox en utilisant du sélénium?

après enquête, il a été constaté que le conducteur de la marionnette est incomplet et toujours en cours, et aucune quantité de réglage de diverses capacités ou de profil les options pour congédier ou établir des certificats allaient fonctionner. Donc, c'était juste plus facile d'utiliser un profil personnalisé.

en tout cas voici le code sur la façon dont j'ai fait fonctionner le geckodriver sans être dans le chemin:

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
répondu Roochiedoor 2017-05-23 12:02:57

J'utilise Windows 10 et cela a fonctionné pour moi:

  1. télécharger geckodriver de ici . Téléchargez la bonne version pour l'ordinateur que vous utilisez
  2. décompressez le fichier que vous venez de télécharger et découpez/Copiez le".exe "fichier qu'il contient
  3. naviguez vers C: {votre dossier racine de python}. Le mien était C:\Python27. Coller le geckodriver.fichier exe dans ce dossier.
  4. redémarrez votre environnement de développement.
  5. essayez d'exécuter le code à nouveau, il devrait fonctionner maintenant.
3
répondu anotherNoob 2017-07-19 14:43:10

quelques commentaires/clarifications supplémentaires pour les futurs lecteurs de ce fil:

la résolution suivante suffit pour Windows 7, Python 3.6, sélénium 3.11:

la note de @dsalaj dans ce thread ci-dessus pour Unix s'applique aussi à Windows; bricolage avec le chemin env. variable au niveau des fenêtres et le redémarrage du système de fenêtres peut être évité.

(1) Télécharger geckodriver (comme décrit dans ce fil plus tôt) et de placer le geckdriver (unzipped).exe at X:\Folder\of\your\choice

(2) Exemple de code 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

Notes: (1) cela peut prendre environ 10 secondes pour que le code ci-dessus ouvre le navigateur Firefox pour l'url spécifiée.

(2) la console python affichera l'erreur suivante s'il n'y a pas de serveur déjà tournant à l'url spécifiée ou servant une page avec le titre contenant la chaîne de caractères 'Django': nium.commun.exception.WebDriverException: Message: Atteint page d'erreur: sujet:neterror?e=connexion & u = http%3A/ / localhost%3A8000/ & c=UTF-8&f=regular&d=Firefox%20can%E2 % 80% 9

3
répondu Snidhi Sofpro 2018-04-16 07:14:54

si vous utilisez Anaconda , tout ce que vous avez à faire est d'activer votre environnement virtuel et ensuite installer geckodriver en utilisant la commande :

    conda install -c conda-forge geckodriver
3
répondu Rodolfo Alvarez 2018-06-26 10:12:45

il est vraiment assez triste qu'aucun des livres publiés sur Selenium/Python et la plupart des commentaires sur cette question via Google n'expliquent pas clairement la logique de mise en place de ce système sur Mac (tout est Windows!!!!). La ses youtubes tous ramassage à "l'après" vous avez le cheminement de l'installation (dans mon esprit, le bon moyen de sortir!). Ainsi, pour les merveilleux utilisateurs de Mac, utilisez ce qui suit pour éditer vos fichiers de chemin de bash:

>$touch ~/.bash_profile; ouvrir ~ / .bash_profile

puis Ajouter un chemin quelque chose comme ça.... * # Définir le chemin pour geckodriver PATH= " / usr / bin/geckodriver: $ {PATH}" export PATH

Réglage de CHEMIN pour le Sélénium firefox

PATH="~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" export PATH

chemin de paramétrage pour l'exécutable sur le pilote firefox

PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" voie d'exportation *

ça a marché pour moi. Ma préoccupation est de savoir quand la communauté Selenium Windows commencera à jouer le vrai jeu et à inclure les utilisateurs Mac dans leur club arrogant.

2
répondu JustASteve 2016-12-19 21:38:27

la façon la plus facile pour windows!

Je viens de télécharger la dernière version de geckodriver (j'ai win10) de ici et a ajouté que geckodriver.exe fichier dans le répertoire python C:\Users\my.name (qui est déjà dans le chemin) Il a travaillé pour moi!

2
répondu Jalles10 2017-10-22 23:16:17

sélénium répond à cette question dans leur 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.

il suffit simplement de télécharger le geckodriver, de le déballer et de déplacer l'exécutable dans votre dossier / usr / bin

1
répondu Peter Graham 2017-04-19 15:21:55

Mac 10.12.1 python 2.7.10 ce travail pour moi :)

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
répondu do01 2017-02-15 21:59:47

sur Raspberry Pi j'ai dû créer à partir du pilote ARM et régler le geckodriver et le chemin de log in:

sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/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
répondu Nathan Gisvold 2017-02-27 20:10:46

Visit Gecko Driver obtenir l'url pour le pilote gecko à partir de la section Téléchargements.

Clone ce repo https://github.com/jackton1/script_install.git

cd script_install

Exécuter

./installer --gecko-driver url_to_gecko_driver

0
répondu jackotonye 2017-08-17 16:02:45

J'utilise Windows 10 et Anaconda2. J'ai essayé de définir la variable de chemin du système mais ça n'a pas marché. Puis j'ai simplement ajouté geckodriver.le fichier exe vers le dossier Anaconda2 / Scripts et tout fonctionne très bien maintenant. Pour moi le chemin était: -

C:\Users\Bhavya\Anaconda2\Scripts

0
répondu Bhavya Ghai 2017-12-13 01:48:04