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 ?
Selenium.common.exceptions.WebDriverException : Message : 'geckodriver' ; executable needs to be in PATH.
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' ; 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)
cette étape a été résolue pour moi sur ubuntu firefox 50.
[1] : https://github.com/mozilla/geckodriver/releases
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)
C’est vraiment triste qu’aucun des livres publiés sur Selenium/Python et la plupart des commentaires sur cette question via Google n’expliquent 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
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.