Аз съм нов в програмирането и започнах с Python
преди около 2 месеца и преглеждам текста на Sweigart's Automate the Boring Stuff with Python. Използвам IDLE и вече съм инсталирал модула selenium и браузъра Firefox.
Всеки път, когато се опитам да стартирам функцията на webdriver, получавам това:
from selenium import webdriver
browser = webdriver.Firefox()
Изключение :-
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.
Мисля, че трябва да задам пътя за geckodriver
, но не съм сигурен как, така че може ли някой да ми каже как да направя това?
selenium.common.exceptions.WebDriverException: Съобщение: 'geckodriver' изпълнимият файл трябва да бъде в PATH.
Всъщност клиентските връзки на Selenium се опитват да намерят изпълнимия файл geckodriver
от системния PATH
. Ще трябва да добавите директорията, съдържаща изпълнимия файл, към системния път.
На Unix системите можете да направите следното, за да я добавите към пътя за търсене на вашата система, ако използвате bash-съвместима обвивка:
export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
В Windows ще трябва да актуализирате системната променлива Path, за да добавите пълния път до директорията на изпълнимия geckodriver ръчно или от командния ред(не забравяйте да рестартирате системата си, след като добавите изпълнимия geckodriver в системния PATH, за да влезе в сила). Принципът е същият като при Unix.
Сега можете да стартирате кода си по същия начин, както го правите, както е показано по-долу :-
from selenium import webdriver
browser = webdriver.Firefox()
selenium.common.exceptions.WebDriverException: Message: Очаквано двоично местоположение на браузъра, но не може да се намери двоично местоположение по подразбиране, не е предоставена възможност 'moz:firefoxOptions.binary' и не е зададен двоичен флаг в командния ред
Изключението ясно заявява, че сте инсталирали firefox на друго място, докато Selenium се опитва да намери firefox и да го стартира от мястото по подразбиране, но не може да го намери. Трябва да предоставите изрично двоичното местоположение на инсталирания firefox, за да стартирате firefox, както е посочено по-долу :-
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)
тези стъпки са решени за мен на Ubuntu Firefox 50.
Изтегляне на geckodriver
Копирайте geckodriver в /usr/local/bin
НЕ е необходимо да добавяте
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Наистина е доста тъжно, че нито една от книгите, публикувани за Selenium/Python, и повечето от коментарите по този въпрос чрез Google не обясняват ясно логиката на пътя, за да настроите това на Mac (всичко е Windows!!!!). Всички youtubes се спират на "след като" сте настроили патинга (според мен това е евтиният изход!). Така че, за вас, прекрасните потребители на Mac, използвайте следното, за да редактирате файловете с пътища на bash:
>$touch ~/.bash_profile; open ~/.bash_profile
След това добавете път по следния начин.... *# Задаване на PATH за 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*
Това работи за мен. Притеснението ми е кога общността на Selenium Windows ще започне да играе истинската игра и ще включи нас, потребителите на Mac, в членството си в техния арогантен клуб.