it-swarm-eu.dev

Selenium con Python - L'eseguibile di Geckodriver deve essere in PATH

Sono nuovo alla programmazione e ho iniziato con Python circa 2 mesi fa e ho approfondito Sweigart Automate the Boring Stuff con Python text. Sto usando IDLE e ho già installato il modulo Selenium e il browser Firefox . Ogni volta che ho provato a eseguire la funzione webdriver, ottengo questo:

from Selenium import webdriver
browser = webdriver.Firefox()

Eccezione :-

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. 

Penso di aver bisogno di impostare il percorso per geckodriver ma non sono sicuro di come, quindi qualcuno può dirmi come farei questo?

306
tadm123

Selenium.common.exceptions.WebDriverException: Messaggio: l'eseguibile 'geckodriver' deve essere in PATH. 

Prima di tutto dovrai scaricare l'ultimo geckodriver eseguibile da qui per eseguire l'ultimo firefox usando Selenium

In realtà, i collegamenti client Selenium cercano di individuare l'eseguibile geckodriver dal sistema PATH. Sarà necessario aggiungere la directory contenente l'eseguibile al percorso di sistema.

  • Sui sistemi Unix puoi fare quanto segue per aggiungerlo al percorso di ricerca del tuo sistema, se stai usando una shell bash-compatibile:

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
    
  • Su Windows è necessario aggiornare la variabile di sistema Path per aggiungere il percorso completo alla directory eseguibile geckodrivermanualmente o command line(non dimenticare di riavviare il sistema dopo aver aggiunto eseguibile geckodriver nel sistema PATH per avere effetto). Il principio è lo stesso di Unix. 

Ora puoi eseguire il tuo codice come hai fatto di seguito: -

from Selenium import webdriver

browser = webdriver.Firefox()

Selenium.common.exceptions.WebDriverException: Messaggio: posizione binaria del browser prevista, ma impossibile trovare binari nella posizione predefinita, nessuna funzionalità 'moz: firefoxOptions.binary' e nessun flag binario impostato sulla riga di comando

Eccezione afferma chiaramente che hai installato firefox in qualche altra posizione mentre Selenium sta cercando di trovare firefox e si avvia dalla posizione predefinita ma non è stato trovato. È necessario fornire esplicitamente il percorso binario installato da Firefox per avviare firefox come di seguito: -

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)
264
Saurabh Gaur

Questo l'ha risolto per me.

from Selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
92
Nesa

questo passo RISOLTO per me su ubuntu firefox 50.

  1. Scarica geckodriver

  2. Copia geckodriver in/usr/local/bin

NON è necessario aggiungere 

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
91

La risposta di @saurabh risolve il problema, ma non spiega perché Automatizza la cosa noiosa con Python non include questi passaggi.

Ciò è causato dal fatto che il libro è basato su Selenium 2.xe il driver di Firefox per quella serie non ha bisogno del driver gecko. L'interfaccia Gecko per guidare il browser non era disponibile quando Selenium era in fase di sviluppo.

La ultima versione nella serie 2.x.6 di Selenium è 2.53.6 (vedere per esempio questa risposta , per una visualizzazione più semplice delle versioni).

La 2.53.6 versione della pagina non menziona affatto il geco. Ma dalla versione 3.0.2 la documentazione afferma esplicitamente è necessario installare il driver gecko.

Se dopo un aggiornamento (o l'installazione su un nuovo sistema), il software che ha funzionato bene prima (o sul tuo vecchio sistema) non funziona più e sei di fretta, pin la versione di Selenium nel tuo virtualenv facendo

pip install Selenium==2.53.6

ma ovviamente la soluzione a lungo termine per lo sviluppo è quella di impostare una nuova virtualenv con l'ultima versione di Selenium, installare il driver gecko e verificare se tutto funziona come previsto. Ma l'urto della versione principale potrebbe introdurre altre modifiche API che non sono incluse nel tuo libro, quindi potresti voler rimanere con il vecchio Selenium, finché non sarai abbastanza sicuro da poter correggere tu stesso le discrepanze tra l'API Selenium2 e Selenium3.

25
Anthon

Su macOS con Homebrew già installato puoi semplicemente eseguire il comando Terminale

$ brew install geckodriver

Poiché homebrew ha già esteso il PATH non è necessario modificare alcun script di avvio.

13
roskakori

Per configurare geckodriver per Selenium Python:

È necessario impostare il percorso geckodriver con FirefoxDriver come indicato di seguito:

self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')

Scarica geckodriver per il tuo sistema operativo adatto (da https://github.com/mozilla/geckodriver/releases ) -> Estrai in una cartella di tua scelta -> Imposta il percorso correttamente come menzionato sopra

Sto usando Python 3.6.2 e Selenium WebDriver 3.4.3 in Windows 10.

Un altro modo per configurare geckodriver:

i) Basta incollare il geckodriver.exe sotto/Python/Scripts/(Nel mio caso la cartella era: C:\Python36\Scripts)
ii) Ora scrivi il codice semplice come di seguito:

self.driver = webdriver.Firefox()
12
Ripon Al Wasim

Passi per MAC:

La soluzione più semplice è scaricare GeckoDriver e aggiungerlo al tuo PATH di sistema. Puoi utilizzare uno dei due approcci:

Metodo corto:

1) Scaricare e decomprimere Geckodriver .

2) Indicare il percorso durante l'avvio del driver:

driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')

Metodo lungo:

1) Scaricare e decomprimere Geckodriver .

2) Apri .bash_profile. Se non lo hai ancora creato, puoi farlo usando il comando: touch ~/.bash_profile. Quindi aprilo usando: open ~/.bash_profile

3) Considerando che il file GeckoDriver è presente nella cartella Download, è possibile aggiungere le seguenti righe al file .bash_profile:

PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH

Con ciò accodate il percorso di GeckoDriver al vostro PATH di sistema. Questo indica al sistema dove si trova GeckoDriver durante l'esecuzione degli script Selenium. 

4) Salvare .bash_profile e forzarlo per l'esecuzione. Carica immediatamente i valori senza dover riavviare. Per fare ciò è possibile eseguire il seguente comando:

source ~/.bash_profile

5) Questo è tutto. Hai fatto!. Adesso puoi eseguire lo script Python.

5
Umang Sardesai

Alcuni input/chiarimenti aggiuntivi per i futuri lettori di questo thread:

Quanto segue è sufficiente come risoluzione per Windows 7, Python 3.6, Selenium 3.11:

la nota di @ dsalaj in questa discussione precedente per Unix è applicabile anche a Windows; armeggiare con il PATH env. variabile a livello di Windows e riavvio del sistema Windows può essere evitato.

(1) Scarica geckodriver (come descritto in questa discussione in precedenza) e posiziona il geckdriver.exe (non compresso) in X:\Folder\of\your\choice

(2) Esempio di codice Python:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from Selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

Note: (1) Il codice sopra riportato può richiedere circa 10 secondi per aprire il browser Firefox per l'url specificato.
(2) La console python mostrerebbe il seguente errore se non ci sono server già in esecuzione nell'URL specificato o che servono una pagina con il titolo contenente la stringa "Django": Selenium.common.exceptions.WebDriverException: Messaggio: Pagina errore raggiunto: about: neterror? E = connectionFailure & u = http% 3A // localhost% 3A8000/& c = UTF-8 & f = regolare & d = Firefox% 20can% E2% 80% 9

5
Snidhi Sofpro

Il modo più semplice per Windows!
Ho appena scaricato l'ultima versione geckodriver (ho win10) da here e ho aggiunto che geckodriver.exe file nella directory python C:\Users\my.name (che già in PATH) Ha funzionato per me!

4
Jalles10

Sto usando Windows 10 e questo ha funzionato per me:

  1. Scarica geckodriver da qui . Scarica la versione giusta per il computer che stai utilizzando
  2. Decomprimere il file appena scaricato e tagliare/copiare il file ".exe" che contiene
  3. Passare a C: {la cartella radice python}. Il mio era C:\Python27. Incolla il file geckodriver.exe in questa cartella.
  4. Riavvia il tuo ambiente di sviluppo.
  5. Prova a eseguire nuovamente il codice, dovrebbe funzionare ora.
3
anotherNoob

Se stai usando Anaconda , tutto ciò che devi fare è attivare il tuo ambiente virtuale e quindi installare geckodriver usando il seguente comando :

    conda install -c conda-forge geckodriver
3
Rodolfo Alvarez

Ho scoperto che puoi usare l'ultimo geckodriver senza metterlo nel percorso del sistema. Attualmente sto usando 

https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.Zip

Firefox 50.1.0

Python 3.5.2 

Selenio 3.0.2

Windows 10

Sto usando un VirtualEnv (che gestisco usando PyCharm, presumo che usi Pip per installare tutto)

Nel codice seguente posso usare un percorso specifico per il geckodriver usando il parametro di parametro executable_path (l'ho scoperto dando un'occhiata in Lib\site-packages\Selenium\webdriver\firefox\webdriver.py). Nota Ho il sospetto che l'ordine degli argomenti dei parametri quando si chiama il webdriver sia importante, motivo per cui executable_path è l'ultimo nel mio codice (la seconda riga dell'ultima all'estrema destra)

Si può inoltre notare che utilizzo un profilo firefox personalizzato per aggirare il problema sec_error_unknown_issuer che si verificherà se il sito che si sta testando presenta un certificato non attendibile. vedere Come disabilitare l'avviso di connessione non attendibile di Firefox usando Selenium?

Dopo un'indagine, è stato riscontrato che il driver della marionetta è incompleto e ancora in corso, e nessuna impostazione di varie funzionalità o opzioni di profilo per il licenziamento o l'impostazione di certificazioni avrebbe funzionato. Quindi era solo più facile usare un profilo personalizzato. 

Comunque qui è il codice su come ho fatto il geckodriver a lavorare senza essere nel percorso:

from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True

#In the next line I'm using a specific FireFox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a FireFox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager

ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')
3
Roochiedoor

È davvero piuttosto triste che nessuno dei libri pubblicati su Selenium/Python e la maggior parte dei commenti su questo problema via Google non spieghino chiaramente la logica del path per configurarlo su Mac (tutto è Windows !!!!). Il youtubes tutto pickup al "dopo" hai la configurazione del percorso (nella mia mente, la via d'uscita economica!). Quindi, per voi meravigliosi utenti Mac, utilizzate il comando seguente per modificare i file del percorso bash:

> $ touch ~/.bash_profile; apri ~/.bash_profile

Quindi aggiungi un percorso simile a questo .... * # Impostazione di PATH per geckodriver PATH = "/ usr/bin/geckodriver: $ {PATH}" Export PATH

Impostazione di PATH per Selenium firefox

PERCORSO = "~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/firefox /: $ {PATH}" Export PATH

Impostazione del PATH per l'eseguibile sul driver firefox

PATH = "/ Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/common/service.py: $ {PATH}" Export PATH *

Questo ha funzionato per me. La mia preoccupazione è quando la community di Selenium Windows inizierà a giocare al vero gioco e ci includerà gli utenti Mac nella loro arrogante appartenenza al club.

2
JustASteve

Il selenio risponde a questa domanda nella loro DESCRIPTION.rst

Drivers
=======

Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it's in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.

Failure to observe this step will give you an error `Selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

In pratica basta scaricare il geckodriver, decomprimerlo e spostare l'eseguibile nella cartella/usr/bin

2
Peter Graham

Visita Gecko Driver ottieni l'url per il driver gecko dalla sezione Download.

Clona questo repository https://github.com/jackton1/script_install.git

cd script_install

Correre

./installer --gecko-driver url_to_gecko_driver

0
jackotonye

Sto usando Windows 10 e Anaconda2. Ho provato a impostare la variabile del percorso di sistema ma non ho funzionato. Poi ho semplicemente aggiunto il file geckodriver.exe alla cartella Anaconda2/Scripts e tutto funziona alla grande ora ..__ Per me il percorso era: -

C:\Users\Bhavya\Anaconda2\Scripts

0
Bhavya Ghai

Se si desidera aggiungere i percorsi del driver su Windows 10:

  1. Fare clic con il tasto destro sull'icona "Questo PC" e selezionare "Proprietà"  enter image description here

  2. Clicca su "Impostazioni di sistema avanzate"

  3. Clicca su "Variabili d'ambiente" nella parte inferiore dello schermo
  4. Nella sezione "Variabili utente" evidenzia "Percorso" e fai clic su "Modifica"
  5. Aggiungi i percorsi alle tue variabili facendo clic su "Nuovo" e digitando il percorso per il driver che stai aggiungendo e premendo invio.
  6. Dopo aver inserito il percorso, fai clic su "OK"
  7. Continua a fare clic su "OK" fino a quando non hai chiuso tutte le schermate
0
Russ Thomas

Mac 10.12.1 python 2.7.10 Questo lavoro per me :)

def download(url):
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
browser = webdriver.Firefox(capabilities=firefox_capabilities,
                            executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
browser.get(url)
return browser.page_source
0
do01

Su Raspberry Pi ho dovuto creare dal driver ARM e impostare il geckodriver e il percorso di log in: 

Sudo nano /usr/local/lib/python2.7/dist-packages/Selenium/webdriver/firefox/webdriver.py

def __init__(self, firefox_profile=None, firefox_binary=None,
             timeout=30, capabilities=None, proxy=None,
             executable_path="/PATH/gecko/geckodriver",                     
firefox_options=None,
             log_path="/PATH/geckodriver.log"):
0
Nathan Gisvold

Per gli utenti di windows

usa il codice originale così com'è:

from Selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")

quindi scaricare il driver da: mozilla/geckodriver

Inseriscilo in un percorso fisso (permanente) .. come esempio, lo metto in:

C:\Python35

Quindi vai alle variabili di ambiente del sistema, nella griglia di "Variabili di sistema" cerca la variabile Path e aggiungi:

; C:\Python35\geckodriver

geckodriver, non geckodriver.exe .

0
Ghanem