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

Je suis novice en programmation et j'ai commencé avec Python il y a environ 2 mois. Je suis en train de parcourir 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'essaie d'exécuter la fonction webdriver, j'obtiens 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. Quelqu'un peut-il me dire comment faire ?

Solution

Selenium.common.exceptions.WebDriverException : Message : 'geckodriver&#39 ; executable needs to be in PATH.

Tout d'abord, vous devez télécharger le dernier exécutable geckodriver à partir d'ici pour exécuter la dernière version de Firefox en utilisant selenium

En fait, les liens du client Selenium essaient de localiser l'exécutable geckodriver dans le PATH du système. Vous devrez ajouter le répertoire contenant l'exécutable au 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 avec bash :

      export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
  • Sous Windows, vous devrez mettre à jour la variable système Path pour ajouter le chemin complet du répertoire de l'exécutable geckodriver manuellement ou en 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 que cela prenne effet). Le principe est le même que sous Unix.

Maintenant, vous pouvez exécuter votre code comme vous le faites actuellement, comme 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&#39 ; fournie et aucun indicateur binaire 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 n'a pas pu le trouver. Vous devez fournir explicitement l'emplacement binaire de l'installation de firefox pour lancer firefox, comme indiqué 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)
Commentaires (14)

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

  1. Télécharger [geckodriver][1]

[1] : https://github.com/mozilla/geckodriver/releases

  1. Copier 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)
Commentaires (6)

C&#8217est vraiment triste qu&#8217aucun des livres publiés sur Selenium/Python et la plupart des commentaires sur cette question via Google n&#8217expliquent pas clairement la logique de cheminement pour configurer ceci sur Mac (tout est Windows !!!!). Les youtubes parlent tous d'un " après " la configuration du cheminement (à mon avis, c'est la solution la moins chère !). Donc, pour vous, merveilleux utilisateurs de Mac, utilisez ce qui suit pour éditer vos fichiers de chemin de bash :

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

Puis ajoutez un chemin comme ceci : .... # Configuration du PATH pour geckodriver PATH="/usr/bin/geckodriver:${PATH}" export PATH # Réglage du PATH pour Selenium firefox PATH="~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" export PATH

Définir PATH pour l'exécutable du pilote firefox

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

Cela a fonctionné pour moi. Ce qui m'inquiète, c'est de savoir quand la communauté Selenium Windows va commencer à jouer le vrai jeu et inclure les utilisateurs de Mac dans leur club arrogant.

Commentaires (0)