Jag är ny inom programmering och började med "Python" för ungefär två månader sedan och håller på att gå igenom Sweigarts text Automate the Boring Stuff with Python. Jag använder IDLE och har redan installerat selenium-modulen och webbläsaren Firefox. När jag försökte köra webdriver-funktionen får jag detta:
from selenium import webdriver
browser = webdriver.Firefox()
Undantag :-
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.
Jag tror att jag måste ställa in sökvägen för geckodriver
men jag är inte säker på hur, så kan någon tala om för mig hur jag ska göra detta?
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
[Först och främst måste du ladda ner den senaste körbara geckodrivern härifrån för att köra den senaste Firefox med Selenium] (https://github.com/mozilla/geckodriver/releases)
Seleniums klientbindningar försöker faktiskt hitta den körbara filen "geckodriver" i systemets "PATH". Du måste lägga till den katalog som innehåller den körbara filen i systemets sökväg.
På Unix-system kan du göra följande för att lägga till den till systemets sökväg, om du använder ett bash-kompatibelt skal:
export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
På Windows måste du uppdatera systemvariabeln Path för att lägga till den fullständiga katalogsökvägen till den körbara geckodrivern manuellt eller kommandorad(glöm inte att starta om systemet efter att du lagt till den körbara geckodrivern i systemets PATH för att den ska få effekt). Principen är densamma som på Unix.
Nu kan du köra din kod på samma sätt som du gör nedan :-
from selenium import webdriver
browser = webdriver.Firefox()
selenium.common.exceptions.WebDriverException: Meddelande: Förväntad binär plats i webbläsaren, men kan inte hitta binär på standardplatsen, ingen 'moz:firefoxOptions.binary' kapacitet har tillhandahållits och ingen binär flagga har angetts på kommandoraden.
Undantaget visar tydligt att du har installerat firefox på en annan plats medan Selenium försöker hitta firefox och starta från standardplatsen, men kunde inte hitta den. Du måste ange den binära platsen för installation av firefox för att starta firefox enligt nedan :-
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)
detta steg löste sig för mig på ubuntu firefox 50.
Ladda ner geckodriver
Kopiera geckodriver i /usr/local/bin
Du behöver INTE lägga till
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Det är verkligen tråkigt att ingen av de böcker som publicerats om Selenium/Python och de flesta kommentarer om detta via Google inte tydligt förklarar logiken för att konfigurera detta på Mac (allt är Windows!!!!). Alla youtubes tar upp "efter" du'har fått pathing inställningen (i mitt tycke, den billiga vägen ut!). Så, för er underbara Mac-användare, använd följande för att redigera era bash-sökvägfiler:
>$touch ~/.bash_profile; open ~/.bash_profile
Lägg sedan till en sökväg ungefär så här.... *# Inställning av PATH för geckodriver PATH="/usr/bin/geckodriver:${PATH}" export PATH
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*
Detta fungerade för mig. Mitt bekymmer är när kommer Selenium Windows-gemenskapen att börja spela det riktiga spelet och inkludera oss Mac-användare i deras arroganta klubbmedlemskap.