576 votes

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

Je suis nouveau dans le domaine de la programmation et j'ai commencé à utiliser Python il y a environ deux mois. Automatiser les tâches ennuyeuses avec Python texte. J'utilise IDLE et déjà installé le module Selenium et le navigateur Firefox.

Chaque fois que j'ai essayé d'exécuter la fonction webdriver, j'ai obtenu 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 suis pas sûr de savoir comment, alors comment dois-je faire ?

4 votes

Veuillez consulter ma réponse à une question similaire aquí

0 votes

Je mets le geckodriver.exe dans le répertoire Python/Python35 pour qu'il ait le même chemin et j'ai encore plus de problèmes.

113 votes

Sur Mac : brew install geckodriver

431voto

Saurabh Gaur Points 15926

selenium.common.exceptions.WebDriverException : Message : L'exécutable 'geckodriver' doit être dans le PATH.

Tout d'abord, vous devez télécharger le dernier exécutable geckodriver à partir d'ici pour exécuter le dernier Firefox en utilisant Selenium.

En fait, les liaisons du client Selenium essaient de localiser l'adresse de l'utilisateur. geckodriver exécutable du système PATH . Vous devrez ajouter le répertoire contenant l'exécutable au chemin du système.

  • Sur les systèmes Unix, vous pouvez procéder comme suit pour l'ajouter au chemin de recherche de votre système, si vous utilisez un shell compatible avec Bash :

      export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
  • Sous Windows, vous devrez mettre à jour le Variable système Path pour ajouter le chemin complet du répertoire à l'exécutable geckodriver. manuellement o ligne de commande ** (n'oubliez pas de redémarrer votre système après avoir ajouté l'exécutable geckodriver dans le PATH du système pour qu'il prenne 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 du navigateur attendu, mais impossible de trouver le binaire à l'emplacement par défaut, aucune capacité 'moz:firefoxOptions.binary' n'a été fournie et aucun indicateur binaire n'a été défini sur la ligne de commande.

L'exception indique clairement que vous avez installé Firefox à un autre endroit alors que Selenium essaie de trouver Firefox et de le lancer à partir de l'emplacement par défaut, mais il ne l'a pas trouvé. Vous devez fournir l'emplacement binaire explicitement installé de Firefox pour lancer Firefox comme ci-dessous :-

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)

https://github.com/mozilla/geckodriver/releases

Pour Windows :

Téléchargez le fichier depuis GitHub, extrayez-le, et collez-le dans le fichier Python. Cela a fonctionné pour moi.

https://github.com/mozilla/geckodriver/releases

Pour moi, mon chemin est :

C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39

9 votes

Merci, mais j'ai réglé la valeur de mon geckodriver.exe sur le C:\Python\Python35\selenium et j'ai défini le chemin comme vous l'avez décrit, mais je reçois l'erreur suivante :

0 votes

'selenium.common.exceptions.WebDriverException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line'

0 votes

Cela signifie que le problème de chemin a été résolu, cela indique clairement que vous n'avez pas installé firefox dans l'emplacement par défaut, vous devez donc fournir explicitement l'emplacement d'installation de firefox pour le lancer.

215voto

Nesa Points 995

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')

0 votes

Si vous obtenez une mauvaise permission, essayez d'enlever [r'] du chemin juste "excecutable_path='path". \to\your 'directoire'"

0 votes

@adityarawat quel système d'exploitation utilisez-vous ?

0 votes

Mais maintenant je reçois OSError au lieu de mauvaises permissions. J'ai réussi à copier geckodriver dans /usr/local/bin, mais maintenant cette nouvelle erreur me tue.

140voto

Andrea Perdicchia Points 430

Cette étape résolu pour moi sur Ubuntu et Firefox 50.

  1. Télécharger geckodriver

  2. Copier geckodriver dans le dossier /usr/local/bin

Tu le fais. no besoin d'ajouter :

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

1 votes

Dans votre code, vous ne pouvez pas ajouter la variable de capacité

0 votes

Sauriez-vous par hasard comment définir le répertoire de téléchargement pour Firefox ? J'ai ajouté la question suivante Définir les préférences de Firefox . Toute aide serait très appréciée.

0 votes

Dans Debian ou Ubuntu vous devez utiliser la commande apt pour installer Firefox. Pour Windows, je n'ai aucune idée, désolé

37voto

Anthon Points 4119

La réponse de @saurabh résout le problème, mais n'explique pas pourquoi. Automatiser les tâches ennuyeuses avec Python n'inclut pas ces étapes.

Ceci est dû au fait que le livre est basé sur Selenium 2.x et que 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 lorsque Selenium a été développé.

El nouvelle version dans la série Selenium 2.x est 2.53.6 (voir par exemple [ces réponses][2], pour une vue plus facile des versions).

La [page de la version 2.53.6][3] ne mentionne pas du tout Gecko. Mais depuis la version 3.0.2, la documentation [indique explicitement][4] que vous devez installer le pilote Gecko.

Si après une mise à jour (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 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 selenium, d'installer le pilote Gecko et de tester si tout fonctionne toujours comme prévu.

Mais le changement de version majeur peut introduire d'autres modifications de l'API qui ne sont pas couvertes par votre livre. Il est donc préférable de s'en tenir à l'ancien Selenium, jusqu'à ce que vous soyez suffisamment sûr de pouvoir corriger vous-même les divergences entre l'API de Selenium 2 et celle de Selenium 3.

[2] : https://stackoverflow.com/a/40746017/1307905 ) [3] : https://pypi.python.org/pypi/selenium/2.53.6 [4] : https://pypi.python.org/pypi/selenium#drivers

34voto

roskakori Points 598

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

$ brew install geckodriver

Parce que homebrew a déjà étendu le PATH il n'est pas nécessaire de modifier les scripts de démarrage.

1 votes

@roskakori J'ai fait cela et il a été installé avec succès mais je reçois toujours la même erreur.

0 votes

Cela a fonctionné pour moi, merci. J'utilise Firefox 72.0.2 et Selenium 3.141.0.

0 votes

Cela a fonctionné pour moi aussi sans avoir besoin de modifier quoi que ce soit. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X