web-dev-qa-db-fra.com

Autorisation refusée: 'geckodriver.log' lors de l'exécution de Selenium WebDriver en python

J'ai installé Firefox et Selenium sur centos. J'utilise Xvfb et pyvirtualdisplay pour ouvrir le navigateur.

Lorsque j'essaie d'exécuter Selenium WebDriver, je peux ouvrir un nouvel écran, mais dès que je le fais

browser = webdriver.Firefox()

Je reçois l'erreur:

File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/Selenium/webdriver/firefox/webdriver.py", line 134, in __init__
    self.service = Service(executable_path, log_path=log_path)
  File "/usr/lib/python2.7/site-packages/Selenium/webdriver/firefox/service.py", line 45, in __init__
    log_file = open(log_path, "a+")
IOError: [Errno 13] Permission denied: 'geckodriver.log'

Des indices sur ce qui ne va pas ici?

EDIT: Après avoir surmonté l'erreur de permission, je reçois

Message: 'geckodriver' executable needs to be in PATH

7
Pravesh Jain

Apparemment, cela peut provenir d'une incompatibilité entre votre firefox et votre sélénium. Essayez pip install --upgrade Selenium, et si l'erreur persiste, essayez en téléchargeant une version différente de Firefox , ou du pilote gecko .

Concernant le message: 

'geckodriver' executable needs to be in PATH

Vous pouvez définir le chemin du pilote sur le script:

ff_profile_dir = "/usr/local/Selenium/webdriver/firefox"
ff_profile = Selenium.webdriver.FirefoxProfile(profile_directory=ff_profile_dir)
driver = Selenium.webdriver.Firefox(ff_profile)

Ou, selon cette réponse , vous pourriez exécuter, sur les systèmes Unix, sur un shell compatible bash:

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 fichier chemin de répertoire complet de l'exécutable geckodriver manuellement ou de la commande (n'oubliez pas de redémarrer votre système après avoir ajouté l'exécutable geckodriver à la variable système PATH pour qu'il prenne effet). Le principe est le comme sous Unix.

3
Ivan Chaer

J'avais le même problème. J'ai essayé d'utiliser la réponse d'Ivan Chaer, mais cela n'a pas fonctionné. J'ai essayé beaucoup d'autres choses avant de trouver une solution efficace. Pendant tout ce temps que j'essayais de faire fonctionner Selenium, j'utilisais le Shell interactif. Lorsque j'ai essayé de mettre le code dans un script, puis de l'exécuter, tout a bien fonctionné.

J'ai alors remarqué qu'un fichier nommé "geckodriver.log" avait été créé dans le même répertoire que le script. Cela m'a donné une idée. J'ai créé un fichier "geckodriver.log" dans C:\Program Files\Python36, puis l'utilisation de Selenium avec Firefox n'a plus généré d'erreur.

3
user7284460

La solution suivante a fonctionné pour moi. Dans mon cas, je commençais mon script Python à partir de l'application Notepad++ de Windows. Mon geckodriver.exe était dans le PATH et se trouvait dans mon dossier C:\Python 27. Un chemin complet vers Firefox a également été fourni. Selenium, geckodriver et Firefox étaient tous sur les dernières versions.

Il s’avère que le fichier geckodriver.log a été créé ici:

C:\Program Files (x86)\Notepad++\geckodriver.log

J'ai trouvé cela en exécutant Notepad++ en tant qu'administrateur. Il était alors capable de créer le fichier où il voulait. J'ai ensuite localisé le fichier et changé les autorisations de fichier en accès complet pour le compte d'utilisateur normal sous Windows (il était configuré pour être en lecture seule).

Après cela, j’ai pu exécuter Notepad ++ normalement et l’erreur avait disparu.

1
Martin Evans

J'ai eu exactement le même problème. Je suis allé sur la page pypi de Selenium . Dans la section Pilotes, ils parlent de geckodriver et vous pouvez trouver le lien vers l'exécutable geckodriver qui convient à votre navigateur et à votre système d'exploitation. 

Je viens de le télécharger, de le décompresser, puis de placer le fichier geckodriver.exe dans C:\Program Files\Python37 (Python37 est déjà dans mon CHEMIN). Et cela fonctionne bien maintenant.

0
Jaj

dans mon cas, geckodriver.log a été créé sur le dossier de script, mais par l'utilisateur root, lors d'une exécution précédente, il est de nouveau exécuté en tant qu'utilisateur normal.

0
Rogelio