web-dev-qa-db-fra.com

Selenium en utilisant Python - L'exécutable Geckodriver doit être dans PATH

Je suis nouveau dans la programmation et j'ai commencé avec Python il y a environ 2 mois et je passe en revue le texte de Sweigart Automate the Boring Stuff with Python. J'utilise IDLE et j'ai déjà installé le module Selenium et le navigateur Firefox . Chaque fois que j'essayais d'exécuter la fonction webdriver, j'obtenais 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:\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. 

Je pense que je dois définir le chemin pour geckodriver mais je ne sais pas comment, alors quelqu'un peut-il me dire comment je ferais cela?

306
tadm123

Selenium.common.exceptions.WebDriverException: Message: l'exécutable 'geckodriver' doit être dans PATH. 

Tout d’abord, vous devrez télécharger le dernier exécutable geckodriver à partir d’ici pour lancer le dernier firefox avec Selenium

En réalité, les liaisons du client Selenium tentent de localiser l'exécutable geckodriver à partir du système PATH. Vous devrez ajouter le répertoire contenant l'exécutable au chemin du système.

  • Si vous utilisez un shell compatible bash, vous pouvez procéder comme suit pour l’ajouter au chemin de recherche de votre système:

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

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

from Selenium import webdriver

browser = webdriver.Firefox()

Selenium.common.exceptions.WebDriverException: Message: Emplacement binaire attendu du navigateur, mais impossible de trouver le fichier binaire dans l'emplacement par défaut, pas de fonctionnalité 'moz: firefoxOptions.binary' fournie ni indicateur binaire défini sur la ligne de commande

Exception indique clairement que vous avez installé firefox à un autre emplacement pendant que Selenium tente de trouver firefox et se lance à partir de l'emplacement par défaut, mais n'a pas pu être trouvé. Vous devez indiquer 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)
264
Saurabh Gaur

Cela a résolu le problème pour moi.

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

cela marche pour moi sur Ubuntu Firefox 50.

  1. Télécharger geckodriver

  2. Copiez 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)
91
Andrea Perdicchia

La réponse de @saurabh résout le problème, mais n'explique pas pourquoi Automate the Boring Stuff with Python n'inclut pas ces étapes.

Cela est dû au fait que le livre est basé sur Selenium 2.x et que le pilote Firefox de cette série n’a pas besoin du pilote gecko. L’interface de Gecko pour piloter le navigateur n’était pas disponible au moment du développement de Selenium.

Le dernière version de la série Selenium 2.x est 2.53.6 (voir, par exemple, cela répond , pour une vue plus facile des versions).

La version 2.53.6 ne mentionne pas du tout gecko. Mais depuis la version 3.0.2, la documentation stipule explicitement vous devez installer le pilote gecko.

Si après une mise à niveau (ou une installation sur un nouveau système), votre logiciel qui fonctionnait bien avant (ou sur votre ancien système) ne fonctionne plus et que vous êtes pressé, épinglez la version de Selenium dans votre virtualenv en le faisant

pip install Selenium==2.53.6

bien entendu, la solution à long terme pour le développement consiste à configurer un nouveau serveur virtuel avec la dernière version de Selenium, à installer le pilote gecko et à vérifier si tout fonctionne toujours comme prévu. Mais la version majeure bump peut introduire d’autres modifications d’API qui ne sont pas couvertes par votre livre. Vous pouvez donc vous en tenir à l’ancien Selenium, jusqu’à ce que vous ayez suffisamment confiance pour pouvoir corriger vous-même les écarts entre les API Selenium2 et Selenium3.

25
Anthon

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

$ brew install geckodriver

Comme homebrew a déjà étendu la variable PATH, il n'est pas nécessaire de modifier les scripts de démarrage.

13
roskakori

Pour configurer geckodriver pour Selenium Python:

Il doit définir le chemin geckodriver avec FirefoxDriver comme ci-dessous:

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

Téléchargez geckodriver pour votre système d'exploitation approprié (à partir de https://github.com/mozilla/geckodriver/releases ) -> Extrayez-le dans un dossier de votre choix -> Définissez correctement le chemin d'accès, comme indiqué ci-dessus.

J'utilise Python 3.6.2 et Selenium WebDriver 3.4.3 dans Windows 10.

Une autre façon de configurer geckodriver:

i) Il suffit de coller le fichier geckodriver.exe sous/Python/Scripts/(dans mon cas, le dossier était: C:\Python36\Scripts)
ii) Maintenant, écrivez le code simple comme ci-dessous:

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

Étapes pour MAC:

La solution simple consiste à télécharger GeckoDriver et à l’ajouter à votre système PATH. Vous pouvez utiliser l'une des deux approches suivantes:

Méthode courte:

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

2) Mentionnez le chemin lors du lancement du pilote:

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

Méthode longue:

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

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

3) Le fichier GeckoDriver étant présent dans votre dossier Téléchargements, vous pouvez ajouter la ou les lignes suivantes au fichier .bash_profile:

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

En ajoutant cela, vous ajoutez le chemin de GeckoDriver à votre système PATH. Cela indique au système où se trouve GeckoDriver lors de l'exécution de vos scripts Selenium. 

4) Enregistrez le .bash_profile et forcez-le à s'exécuter. Cela 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 exécuter le script Python maintenant.

5
Umang Sardesai

Quelques commentaires supplémentaires pour les futurs lecteurs de ce fil de discussion:

Ce qui suit suffit comme résolution pour Windows 7, Python 3.6, Selenium 3.11:

La note de @ dsalaj mentionnée précédemment dans ce fil de discussion pour Unix est également applicable à Windows; bricoler avec le PATH env. variable au niveau Windows et le redémarrage du système Windows peut être évité.

(1) Téléchargez geckodriver (comme décrit précédemment dans ce fil) et placez le fichier (dézippé) geckdriver.exe dans X:\Dossier\de\votre\choix

(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

Remarques: (1) Le code ci-dessus peut prendre environ 10 secondes pour ouvrir le navigateur Firefox pour l'URL spécifiée.
(2) La console python afficherait l'erreur suivante si aucun serveur ne s'exécute déjà à l'URL spécifiée ou si une page avec le titre contenant la chaîne 'Django': Selenium.common.exceptions.WebDriverException: Message: Page d'erreur atteinte: à propos de: neterror? E = connectionFailure & u = http% 3A // localhost% 3A8000/& c = UTF-8 & f = normal & d = Firefox% 20can% E2% 80% 9

5
Snidhi Sofpro

Le moyen le plus simple pour Windows!
Je viens de télécharger la dernière version de geckodriver (j'ai win10) depuis ici et d’ajouter que geckodriver.exe fichier dans le répertoire python C:\Users\my.name (qui est déjà dans PATH) .__ Cela a fonctionné pour moi!

4
Jalles10

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

  1. Téléchargez geckodriver depuis 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 coupez/copiez le fichier ".exe" qu'il contient
  3. Accédez à C: {votre dossier racine python}. Le mien était C:\Python27. Collez le fichier geckodriver.exe dans ce dossier.
  4. Redémarrez votre environnement de développement.
  5. Essayez de réexécuter le code, cela devrait fonctionner maintenant.
3
anotherNoob

Si vous utilisez Anaconda , tout ce que vous avez à faire est d’activer votre environnement virtuel puis d’installer geckodriver à l’aide de la commande suivante :

    conda install -c conda-forge geckodriver
3
Rodolfo Alvarez

Ubuntu 18.04+ et dernière version de geckodriver

Cela devrait également fonctionner pour mac, ou d'autres variétés * 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

En fait, j'ai découvert que vous pouvez utiliser le dernier geckodriver sans le placer dans le chemin système. J'utilise actuellement 

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

J'utilise un VirtualEnv (que je gère avec PyCharm, je suppose qu'il utilise Pip pour tout installer)

Dans le code suivant, je peux utiliser un chemin spécifique pour geckodriver à l'aide du paramètre paramable executable_path (j'ai découvert cela en jetant un coup d'œil à Lib\site-packages\Selenium\webdriver\firefox\webdriver.py). Remarque Je soupçonne que l'ordre des arguments de paramètre lors de l'appel de WebDriver est important. C'est pourquoi l'exécutable_path est le dernier dans mon code (2e dernière ligne à l'extrême droite).

Vous remarquerez peut-être aussi que j'utilise un profil firefox personnalisé pour résoudre le problème de sec_error_unknown_issuer que vous rencontrerez si le site que vous testez contient un certificat non approuvé. voir Comment désactiver l'avertissement de connexion non sécurisée de Firefox à l'aide de Selenium?

Après enquête, il a été constaté que le pilote Marionette était incomplet et toujours en cours, et qu’il n’était pas nécessaire de définir diverses capacités ou options de profil pour licencier ou pour établir des certificats. Il était donc plus facile d'utiliser un profil personnalisé. 

Quoi qu'il en soit, voici le code sur la façon dont j'ai fait fonctionner le geckodriver sans être sur 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
Roochiedoor

C'est vraiment plutôt triste qu'aucun des livres publiés sur Selenium/Python et la plupart des commentaires sur ce problème via Google n'expliquent pas clairement la logique de cheminement pour configurer cela sur Mac (tout est Windows !!!!). Les youtubes sont tous ramassés au "après", vous avez la configuration de la trajectoire (dans mon esprit, la solution la plus économique!). Donc, pour vous, utilisateurs Mac, utilisez ce qui suit pour éditer vos fichiers de chemin bash:

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

Ajoutez ensuite un chemin semblable à celui-ci .... * # Définition de PATH pour geckodriver PATH = "/ usr/bin/geckodriver: $ {PATH}" Export PATH

Paramétrer PATH pour Selenium firefox

PATH = “~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/firefox /: $ {PATH}” Export PATH

Paramétrer PATH pour un exécutable sur le pilote firefox

PATH = "/ Users/votrenomPATH/VEnvPythonInterpreter/lib/python2.7/sites-packages/Selenium/webdriver/common/service.py: $ {PATH}" Export PATH *

Cela a fonctionné pour moi. Mon souci est de savoir quand la communauté Windows de Selenium va commencer à jouer au vrai jeu et inclure les utilisateurs de Mac dans leur adhésion arrogante à un club.

2
JustASteve

Le sélénium répond à cette question dans leur DESCRIPTION.

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.

En gros, il suffit de télécharger geckodriver, de le décompresser et de déplacer l’exécutable dans votre dossier/usr/bin

2
Peter Graham

Visitez Pilote Gecko obtenez l'URL du pilote Gecko dans la section Téléchargements.

Cloner ce référentiel https://github.com/jackton1/script_install.git

cd script_install

Courir

./installer --gecko-driver url_to_gecko_driver

0
jackotonye

J'utilise Windows 10 et Anaconda2. J'ai essayé de définir une variable de chemin système, mais cela n'a pas fonctionné. Ensuite, j’ai simplement ajouté le fichier geckodriver.exe au dossier Anaconda2/Scripts et tout fonctionne très bien maintenant .

C:\Users\Bhavya\Anaconda2\Scripts

0
Bhavya Ghai

Si vous souhaitez ajouter les chemins de pilotes sous Windows 10:

  1. Faites un clic droit sur l'icône "Ce PC" et sélectionnez "Propriétés"  enter image description here

  2. Cliquez sur "Paramètres système avancés"

  3. Cliquez sur «Variables d'environnement» en bas de l'écran.
  4. Dans la section «Variables utilisateur», sélectionnez «Chemin» et cliquez sur «Modifier».
  5. Ajoutez les chemins d'accès à vos variables en cliquant sur «Nouveau» et en tapant le chemin d'accès au pilote que vous ajoutez et que vous appuyez sur Entrée.
  6. Une fois que vous avez fini d'entrer dans le chemin, cliquez sur “OK”
  7. Continuez à cliquer sur «OK» jusqu'à ce que tous les écrans soient fermés.
0
Russ Thomas

Mac 10.12.1 python 2.7.10 Ça marche 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
do01

Sur Raspberry Pi, je devais créer à partir du pilote ARM et définir le chemin geckodriver et le journal dans: 

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
Nathan Gisvold

Pour les utilisateurs de Windows

utilisez le code original comme c'est:

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

puis téléchargez le pilote à partir de: mozilla/geckodriver

Placez-le dans un chemin fixe (en permanence) .. à titre d'exemple, je le mets dans:

C:\Python35

Ensuite, allez dans les variables d’environnement du système, dans la grille de "Variables système", recherchez la variable Path et ajoutez:

; C:\Python35\geckodriver

geckodriver, pas geckodriver.exe .

0
Ghanem