Ik'ben nieuw met programmeren en ben ongeveer 2 maanden geleden begonnen met Python
en ben Sweigart's Automate the Boring Stuff with Python tekst aan het doornemen. Ik'gebruik IDLE en heb de selenium module en de Firefox browser al geïnstalleerd.
Telkens wanneer ik probeerde de webdriver functie uit te voeren, krijg ik dit:
from selenium import webdriver
browser = webdriver.Firefox()
Uitzondering :-
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.
Ik denk dat ik het pad voor geckodriver
moet instellen, maar weet niet zeker hoe, dus kan iemand mij vertellen hoe ik dit zou moeten doen?
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable moet in PATH staan.
De Selenium client bindings proberen de geckodriver
executable te vinden in het systeem PATH
. U moet de directory met het uitvoerbare bestand toevoegen aan het systeempad.
Op Unix systemen kunt u het volgende doen om het toe te voegen aan het zoekpad van uw systeem, als u een bash-compatibele shell gebruikt:
export PATH=$PATH:/path/to/directory/van/uitvoerbaar/downloaded/in/previous/step
Op Windows moet u de Path systeemvariabele bijwerken om het volledige directorypad naar het uitvoerbare geckodriver handmatig of commandoregel(vergeet niet uw systeem opnieuw op te starten nadat u het uitvoerbare geckodriver aan het systeem-PATH hebt toegevoegd om effect te hebben). Het principe is hetzelfde als op Unix.
Nu kun je je code uitvoeren zoals je nu doet, zoals hieronder :-
from selenium import webdriver
browser = webdriver.Firefox()
selenium.common.exceptions.WebDriverException: Message: Verwachte browser binaire locatie, maar niet in staat om binaire in standaard locatie te vinden, geen 'moz:firefoxOptions.binary' mogelijkheid verstrekt, en geen binaire vlag ingesteld op de opdrachtregel
Uitzondering geeft duidelijk aan dat u firefox op een andere locatie hebt geïnstalleerd, terwijl Selenium probeert firefox te vinden en te starten vanaf de standaardlocatie, maar het kon'niet vinden. U moet expliciet firefox geïnstalleerde binaire locatie opgeven om firefox te starten zoals hieronder :-
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)
deze stappen OPGELOST voor mij op ubuntu firefox 50.
Download geckodriver
Kopieer geckodriver in /usr/local/bin
U hoeft NIET toe te voegen
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Het'is echt nogal triest dat geen van de boeken die over Selenium/Python zijn gepubliceerd en de meeste commentaren over dit onderwerp via Google niet duidelijk de pathing logica uitleggen om dit op Mac op te zetten (alles is Windows!!!!). De youtubes beginnen allemaal bij de "after" you've got the pathing setup (in mijn ogen, de goedkope uitweg!). Dus, voor jullie geweldige Mac gebruikers, gebruik het volgende om je bash pad bestanden te bewerken:
>$touch ~/.bash_profile; open ~/.bash_profile
Voeg dan een pad toe zoals dit.... *# PATH instellen voor geckodriver PATH="/usr/bin/geckodriver:${PATH}" exporteren PATH
PATH="~/Users/uwNaamPATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" exporteren PATH
PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" exporteren PATH*
Dit werkte voor mij. Mijn zorg is wanneer de Selenium Windows gemeenschap het echte spel gaat spelen en ons Mac gebruikers opneemt in hun arrogante club lidmaatschap.