web-dev-qa-db-fra.com

Selenium en Python sur Mac - l'exécutable Geckodriver doit être dans PATH

Je débute dans la programmation et ai commencé à utiliser Python il y a environ 2 mois. Je reviens sur Automatiser l'ennui avec le texte Python de Sweigart. J'utilise Spyder 3 et j'ai déjà installé le module Selenium et le navigateur Firefox. J'ai utilisé le code suivant dans un fichier python

from Selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://inventwithpython.com')

Je reçois cette erreur:

Message: 'geckodriver' executable needs to be in PATH.

J'ai téléchargé geckodriver.exe en plus d'aller dans le terminal et de l'installer en utilisant

brew install geckodriver

Curieusement, si je vais dans le terminal et que je tape "python" puis que je mets le code, cela fonctionne, mais pas lorsque je lance le fichier dans Spyder. Où dois-je placer le fichier geckodriver.exe pour que cela fonctionne? J'ai essayé de le placer dans différents dossiers (le même dossier que le fichier python, le même dossier que le fichier webdriver, dans le répertoire utilisateur, etc.), mais le même message d'erreur s'affiche. 

J'ai examiné des questions similaires mais je n'arrive pas à trouver quelque chose qui fonctionne. J'ai aussi essayé avec Chrome mais j'obtiens la même erreur mais avec chromedriver.

which geckodriver

rendements /usr/local/bin/geckodriver

Je suis aussi sur Mac, donc les chemins de fichiers sont un peu plus difficiles pour moi que sous Windows.

6
user4389863

RESOLU: J'ai placé l'exécutable geckodriver dans/Users/sethkillian/anaconda/bin et maintenant, il fonctionne à partir de Spyder sans problème. Merci pour l'aide!

2
user4389863

Téléchargez le geckodriver et placez-le dans /usr/local/bin; puis utilisez webdriver.Firefox comme ceci:

from Selenium import webdriver
driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver')
12
JJon.Boat

Peut-être que quelqu'un peut expliquer pourquoi le chemin n'a pas été trouvé. Et j'espère aussi que cela aidera quelqu'un d'autre à résoudre ses propres problèmes de chemin.

Vous pouvez certainement placer l'exécutable geckodriver où bon vous semble. Sur mon Mac, j’ai choisi ~/.local/bin car c’est un emplacement commun pour le stockage des fichiers exécutables spécifiques à un compte utilisateur. Par exemple. le CLI Heroku est placé dans ~/.local/share. Cette approche élimine également le besoin d’un accès superutilisateur lors de l’ajout d’un fichier exécutable à un emplacement système tel que/usr/local/bin 

Je l'ai ensuite ajouté au chemin dans mon .profile avec

    EXPORT PATH=$PATH:~/.local/bin

J'ai testé en ouvrant un terminal et en vérifiant avec:

    geckodriver --version

qui a bien fonctionné.

Mais pour un environnement virtuel Python, pour une raison quelconque, le chemin système n’est pas transmis ?? J'ai découvert cela en ajoutant à mon script de test Selenium:

    import sys

    for p in sys.path:
        print(p)

Ce qui a montré:

    /Users/philip/Devel/myproject
    /Users/philip/.virtualenvs/myproject/lib/python36.Zip
    /Users/philip/.virtualenvs/myproject/lib/python3.6
    /Users/philip/.virtualenvs/myproject/lib/python3.6/lib-dynload
    /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6
    /Users/philip/.virtualenvs/myproject/lib/python3.6/site-packages

Donc finalement, je devais spécifier le chemin avec:

    self.browser = webdriver.Firefox(executable_path=r'/Users/philip/.local/bin/geckodriver')

Cette approche fonctionne bien, mais j'aimerais quand même savoir pourquoi je ne pouvais pas définir le chemin dans l'environnement virtuel. 

0
Philip