Je suis nouveau dans la programmation et j'ai commencé il y a Python
environ 2 mois et je passe en revue Automate the Boring Stuff avec du texte Python de Sweigart . J'utilise IDLE et j'ai déjà installé le module sélénium et le navigateur Firefox. Chaque fois que j'ai essayé d'exécuter la fonction de pilote Web, 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 d'accès, geckodriver
mais je ne sais pas comment, alors quelqu'un peut-il me dire comment procéder?
brew install geckodriver
chromedriver
pour cela.Réponses:
Tout d'abord, vous devrez télécharger le dernier geckodriver exécutable d'ici pour exécuter le dernier firefox en utilisant le sélénium
En fait, les liaisons client Selenium essaient de localiser l'
geckodriver
exécutable du systèmePATH
. Vous devrez ajouter le répertoire contenant l'exécutable au chemin 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 bash:
Sous Windows, vous devrez mettre à jour la variable système Path pour ajouter le chemin de répertoire complet au geckodriver exécutable manuellement ou en ligne de commande (n'oubliez pas de redémarrer votre système après avoir ajouté le geckodriver exécutable dans le système PATH pour prendre effet) . Le principe est le même que sur Unix.
Maintenant, vous pouvez exécuter votre code de la même manière que ci-dessous: -
L'exception indique clairement que vous avez installé Firefox dans un autre emplacement tandis que Selenium essaie de trouver Firefox et de le lancer à partir de l'emplacement par défaut, mais il ne l'a pas trouvé. Vous devez fournir explicitement l'emplacement binaire installé par Firefox pour lancer Firefox comme ci-dessous: -
la source
geckodriver.exe
sur leC:\Python\Python35\selenium
répertoire et j'ai mis le chemin comme vous l'avez décrit mais ça me donne l'erreur ci-dessous:PATH
environnement in unix. Vous pouvez le définir dans le code car vous n'en avez pas besoin à l'échelle du système:os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'
Ou simplement conserver le binaire geckodriver dans le répertoire qui se trouve déjà sur votre chemin:mv geckodriver /usr/local/bin
Cela l'a résolu pour moi.
la source
export PATH=$PATH:geckodriver
(il est extrait dans Desktop). Mais cela n'a pas aidé non plus. Je reçois toujours OSError [errno 8]cela a résolu pour moi sur Ubuntu Firefox 50.
Télécharger geckodriver
Copiez geckodriver dans / usr / local / bin
Vous n'avez PAS besoin d'ajouter
la source
La réponse de @saurabh résout le problème, mais n'explique pas pourquoi Automate the Boring Stuff with Python n'inclut pas ces étapes.
Cela est dû au fait que le livre est basé sur le sélénium 2.x et le pilote Firefox pour cette série n'a pas besoin du pilote gecko. L'interface Gecko pour piloter le navigateur n'était pas disponible lors du développement du sélénium.
La dernière version de la série selenium 2.x est 2.53.6 (voir par exemple ces réponses , pour une vue plus facile des versions).
La page de version 2.53.6 ne mentionne pas du tout gecko. Mais depuis la version 3.0.2, la documentation indique explicitement que vous devez installer le pilote gecko.
Si après une mise à niveau (ou une installation sur un nouveau système), votre logiciel qui fonctionnait bien avant (ou sur votre ancien système) ne fonctionne plus et vous êtes pressé, épinglez la version sélénium dans votre virtualenv en faisant
mais bien sûr, la solution à long terme pour le développement consiste à configurer un nouveau virtualenv avec la dernière version de sélénium, installer le pilote gecko et tester si tout fonctionne toujours comme prévu. Mais le bump de la version principale peut introduire d'autres changements d'API qui ne sont pas couverts par votre livre, vous pouvez donc vouloir vous en tenir à l'ancien sélénium, jusqu'à ce que vous soyez suffisamment confiant pour pouvoir corriger vous-même les écarts entre l'API selenium2 et selenium3.
la source
Sur macOS avec Homebrew déjà installé, vous pouvez simplement exécuter la commande Terminal
Parce que homebrew a déjà étendu le,
PATH
il n'est pas nécessaire de modifier les scripts de démarrage.la source
Pour configurer geckodriver pour Selenium Python:
Il doit définir le chemin geckodriver avec FirefoxDriver comme le code ci-dessous:
Téléchargez geckodriver pour votre système d'exploitation approprié (depuis https://github.com/mozilla/geckodriver/releases ) -> Extrayez-le dans un dossier de votre choix -> Définissez le chemin correctement comme mentionné ci-dessus
J'utilise Python 3.6.2 et Selenium WebDriver 3.4.3 dans Windows 10.
Une autre façon de configurer geckodriver:
i) Collez simplement le geckodriver.exe sous / Python / Scripts / (Dans mon cas, le dossier était: C: \ Python36 \ Scripts)
ii) Maintenant, écrivez le code simple comme ci-dessous:
la source
Si vous utilisez Anaconda , il vous suffit d'activer votre environnement virtuel puis d'installer geckodriver à l'aide de la commande suivante :
la source
Ubuntu 18.04+ et dernière version de geckodriver
Cela devrait également fonctionner pour d'autres variétés * nix.
Pour la mise à jour mac vers:
la source
Je vois que les discussions parlent toujours de l'ancienne façon de configurer geckodriver en téléchargeant le binaire et en configurant le chemin manuellement.
Cela peut être fait automatiquement en utilisant webdriver-manager
Maintenant, le code ci-dessus dans la question fonctionnera simplement avec le changement ci-dessous,
la source
Le moyen le plus simple pour Windows!
Téléchargez la dernière version
geckodriver
d' ici . Ajoutez le fichier geckodriver.exe au répertoire python (ou à tout autre répertoire déjà présentPATH
). Cela devrait résoudre le problème (testé sur Windows 10)la source
Étapes pour MAC:
La solution simple consiste à télécharger GeckoDriver et à l'ajouter à votre système PATH. Vous pouvez utiliser l'une des deux approches:
Méthode courte:
1) Téléchargez et décompressez Geckodriver .
2) Mentionnez le chemin lors du lancement du pilote:
Méthode longue:
1) Téléchargez et décompressez Geckodriver .
2) Ouvrez
.bash_profile
. Si vous ne l' avez pas encore créé, vous pouvez le faire en utilisant la commande:touch ~/.bash_profile
. Ouvrez-le ensuite en utilisant:open ~/.bash_profile
3) Étant donné que le fichier GeckoDriver est présent dans votre dossier Téléchargements, vous pouvez ajouter la ou les lignes suivantes au
.bash_profile
fichier:Par cela, vous ajoutez le chemin d'accès à GeckoDriver à votre chemin système. Cela indique au système où se trouve GeckoDriver lors de l'exécution de vos scripts Selenium.
4) Enregistrez le
.bash_profile
et forcez-le à s'exécuter. Cela charge les valeurs immédiatement sans avoir à redémarrer. Pour ce faire, vous pouvez exécuter la commande suivante:source ~/.bash_profile
5) C'est tout. Vous avez terminé!. Vous pouvez maintenant exécuter le script Python.
la source
geckodriver
avec Homebrew:brew install geckodriver
puis lancer Firefox via:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Quelques entrées / clarifications supplémentaires pour les futurs lecteurs de ce fil:
La résolution suivante suffit pour Windows 7, Python 3.6, sélénium 3.11:
La note de @ dsalaj dans ce fil plus tôt pour Unix s'applique également à Windows; bricoler avec le PATH env. variable au niveau Windows et le redémarrage du système Windows peuvent être évités.
(1) Téléchargez geckodriver (comme décrit dans ce fil plus tôt) et placez le geckdriver.exe (décompressé) dans X: \ Folder \ of \ your \ choice
(2) Exemple de code Python:
Remarques: (1) Le code ci-dessus peut prendre environ 10 secondes pour ouvrir le navigateur Firefox pour l'URL spécifiée.
(2) La console python afficherait l'erreur suivante s'il n'y a pas de serveur déjà en cours d'exécution à l'URL spécifiée ou servant une page avec le titre contenant la chaîne 'Django': selenium.common.exceptions.WebDriverException: Message: page d'erreur atteinte: à propos de : neterror? e = connectionFailure & u = http% 3A // localhost% 3A8000 / & c = UTF-8 & f = regular & d = Firefox% 20can% E2% 80% 9
la source
J'ai découvert que vous pouvez utiliser le dernier geckodriver sans le mettre dans le chemin système. Actuellement j'utilise
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
Firefox 50.1.0
Python 3.5.2
Sélénium 3.0.2
Windows 10
J'utilise un VirtualEnv (que je gère à l'aide de PyCharm, je suppose qu'il utilise Pip pour tout installer)
Dans le code suivant, je peux utiliser un chemin spécifique pour le geckodriver en utilisant le paramètre exécutable_path (je l'ai découvert en consultant Lib \ site-packages \ selenium \ webdriver \ firefox \ webdriver.py). Remarque J'ai un soupçon que l'ordre des arguments des paramètres lors de l'appel du webdriver est important, c'est pourquoi le chemin_exécutable est le dernier dans mon code (2ème dernière ligne à l'extrême droite)
Vous pouvez également remarquer que j'utilise un profil Firefox personnalisé pour contourner le problème sec_error_unknown_issuer que vous rencontrerez si le site que vous testez possède un certificat non approuvé. voir Comment désactiver l'avertissement de connexion non fiable de Firefox à l'aide de Selenium?
Après enquête, il a été constaté que le pilote de la marionnette est incomplet et toujours en cours, et aucune quantité de définition de diverses capacités ou options de profil pour le rejet ou la définition de certificats n'allait fonctionner. Il était donc plus facile d'utiliser un profil personnalisé.
Quoi qu'il en soit, voici le code sur la façon dont j'ai fait fonctionner le geckodriver sans être sur le chemin:
la source
J'utilise Windows 10 et cela a fonctionné pour moi:
la source
Pensez à installer un Firefox conteneurisé:
Connectez-vous en utilisant
webdriver.Remote
:la source
C'est vraiment assez triste qu'aucun des livres publiés sur Selenium / Python et la plupart des commentaires sur ce problème via Google n'expliquent clairement la logique de cheminement pour configurer cela sur Mac (tout est Windows !!!!). Les youtubes sont tous ramassés à l '"après", vous avez la configuration de cheminement (dans mon esprit, la sortie bon marché!). Donc, pour vous, merveilleux utilisateurs de Mac, utilisez ce qui suit pour modifier vos fichiers de chemin bash:
> $ touch ~ / .bash_profile; ouvrir ~ / .bash_profile
Ensuite, ajoutez un chemin d'accès quelque chose comme ceci .... * # Définition de PATH pour geckodriver PATH = "/ usr / bin / geckodriver: $ {PATH}" export PATH
Configuration de PATH pour Selenium firefox
PATH = "~ / Users / yourNamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / firefox /: $ {PATH}" PATH d'exportation
Configuration de PATH pour l'exécutable sur le pilote Firefox
PATH = “/ Users / yournamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / common / service.py: $ {PATH}” export PATH *
Cela a fonctionné pour moi. Ma préoccupation est quand la communauté Selenium Windows commencera-t-elle à jouer au vrai jeu et nous inclura-t-elle les utilisateurs Mac dans son arrogant club.
la source
Selenium répond à cette question dans leur DESCRIPTION.
Fondamentalement, il suffit de télécharger le geckodriver, de le déballer et de déplacer l'exécutable dans votre dossier / usr / bin
la source
utilisez le code d'origine car il est:
puis téléchargez le pilote depuis: mozilla / geckodriver
Placez-le dans un chemin fixe (en permanence) .. à titre d'exemple, je le mets dans:
Allez ensuite dans les variables d'environnement du système, dans la grille des "Variables système" recherchez la variable Path et ajoutez:
geckodriver, pas geckodriver.exe .
la source
Sur Raspberry Pi, j'ai dû créer à partir du pilote ARM et définir le geckodriver et le chemin de connexion dans:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
la source
Si vous utilisez un environnement virtuel et win10 (c'est peut-être le cas pour d'autres systèmes), il vous suffit de placer geckodriver.exe dans le dossier suivant de votre répertoire d'environnement virtuel:
... \ my_virtual_env_directory \ Scripts \ geckodriver.exe
la source
cela vous donnera le chemin vers votre gekodriver.exe sur Windows
la source
Mac 10.12.1 python 2.7.10 ce travail pour moi :)
la source
J'utilise Windows 10 et Anaconda2. J'ai essayé de définir la variable de chemin d'accès système, mais je n'ai pas réussi. Ensuite, j'ai simplement ajouté le fichier geckodriver.exe au dossier Anaconda2 / Scripts et tout fonctionne très bien maintenant. Pour moi, le chemin était: -
C: \ Users \ Bhavya \ Anaconda2 \ Scripts
la source
Si vous souhaitez ajouter les chemins du pilote sur Windows 10:
Faites un clic droit sur l'icône "Ce PC" et sélectionnez "Propriétés"
Cliquez sur «Paramètres système avancés»
la source
Visitez Gecko Driver pour obtenir l'url du pilote gecko dans la section Téléchargements.
Clonez ce dépôt https://github.com/jackton1/script_install.git
cd script_install
Courir
la source
la source
pour moi, il suffisait juste d'installer geckodriver dans le même environnement:
et le code n'a pas changé:
la source
Pour ajouter mes 5 cents, il est également possible de faire
echo PATH
(Linux) et de simplement déplacer geckodriver dans le dossier de votre choix. Si un dossier système (pas un environnement virtuel) est la cible, le pilote devient globalement accessible.la source