1

J'ai un script python qui fonctionnait bien auparavant mais maintenant des erreurs, donc je ne suis pas sûr de ce qui s'est passé. Je reçois l'erreur:FileNotFoundError: [WinError 2] Le système ne peut pas trouver le fichier spécifié bien que le même fichier a fonctionné précédemment

C:\Users\663255\Desktop>PMI_Tests.py 
Traceback (most recent call last): 
    File "C:\Users\663255\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\service.py", line 74, in start 
    stdout=self.log_file, stderr=self.log_file) 
    File "C:\Users\663255\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 707, in __init__ 
    restore_signals, start_new_session) 
    File "C:\Users\663255\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 990, 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 "C:\Users\663255\Desktop\PMI_Tests.py", line 14, in <module> 
    driver = webdriver.Firefox(firefox_binary=binary, executable_path=gecko+'.exe') 
    File "C:\Users\663255\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 142, in __init__ 
    self.service.start() 
    File "C:\Users\663255\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\service.py", line 81, in start 
    os.path.basename(self.path), self.start_error_message) 
selenium.common.exceptions.WebDriverException: Message: 'geckodriver.exe' executable needs to be in PATH. 

Le début du fichier ressemble à:

import unittest 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
import os 
import time 
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary 
from selenium.webdriver.common.action_chains import ActionChains 
from urllib.request import urlopen 
from html.parser import HTMLParser 


gecko = os.path.normpath(os.path.join(os.path.dirname(__file__), 'geckodriver')) 
binary = FirefoxBinary('C:\Program Files (x86)\Mozilla Firefox\Firefox.exe') 
driver = webdriver.Firefox(firefox_binary=binary, executable_path=gecko+'.exe') 


class PythonOrgSearch(unittest.TestCase): 

#sets up driver to run tests 
    def setUp(self): 
     self.driver = driver 

Je ne suis pas sûr pourquoi le dossier a cessé de fonctionner, car il avait déjà travaillé plusieurs fois auparavant. aussi, python et geckodriver sont définitivement définis dans le chemin, mais lorsqu'ils sont exécutés via le terminal, il est dit que geckodriver n'est pas dans le chemin. J'ai le sentiment que le problème est lié à la façon dont geckodriver (c'est-à-dire la variable gecko) est définie de façon étrange dans le code, ou quelque chose comme ça. J'ai vu d'autres messages de débordement de pile avec des problèmes similaires mais je n'ai rien trouvé qui corrige mon problème. J'utilise Python 3.6.2 si cela est utile. Toute idée serait géniale. Je vous remercie!

+1

Si vous utilisez Windows, vous pouvez simplement ajouter le chemin du système via le chemin d'accès environnemental. J'ai le même problème. Avez-vous pu résoudre? J'utilise Anaconda dans un env virtuel. Chrome fonctionne parfaitement. Habituellement, mettre les pilotes dans un dossier Anaconda se résout habituellement mais geckodriver ne l'utilise pas pour moi. J'utilise un firefox sans tête pour les fenêtres. https://github.com/kybu/headless-selenium-for-win. Dans votre cas, il est probable que l'ajout de pilotes au répertoire Python + la mise à jour des variables d'environnement dans Windows devrait résoudre – Tetora

+0

Je n'utilisais pas anaconda. fini par redéfinir la variable gecko en code dur c'est le chemin, qui a fini par résoudre le problème. –

Répondre

0

En guise de solution à ce problème, j'ai codé en dur le chemin complet de geckodriver dans la variable gecko, au lieu d'essayer de le localiser dynamiquement. Je ne sais pas pourquoi l'approche dynamique a cessé de fonctionner, mais le codage en dur du chemin de fichier a résolu les problèmes pour moi.