Вопрос
Короткая версия
Я только что установил последнюю версию geckodriver ( v0.28.0 ).
Но при создании объекта браузера (b = splinter.Browser()
) я сталкиваюсь с OSError: [Errno 20] Not a directory
.
Как это произошло?Может ли это быть ошибкой, появившейся в новой версии geckodriver в их последней версии?
Длинная версия
Когда я открываю терминал IPython, для Python 2.7:
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
Type "copyright", "credits" or "license" for more information.
IPython 5.5.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
Тогда сделайте:
from splinter import Browser
Пока все в порядке.Поскольку библиотека Python для осколка установлена правильно.
Теперь, когда я пытаюсь создать экземпляр Browser()
объекта:
b = Browser()
, я получаю большую ошибку, которая пока не имеет для меня особого смыслая думаю, что между новой версией Mozilla Firefox geckodriver
и splinter
Python (2.7) есть некоторая несовместимость:
In [4]: b = Browser()
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-4-935d10992ede> in <module>()
----> 1 b = Browser()
/home/osboxes/.local/lib/python2.7/site-packages/splinter/browser.pyc in Browser(driver_name, *args, **kwargs)
62 except KeyError:
63 raise DriverNotFoundError("No driver for %s" % driver_name)
---> 64 return driver(*args, **kwargs)
/home/osboxes/.local/lib/python2.7/site-packages/splinter/driver/webdriver/firefox.pyc in __init__(self, profile, extensions, user_agent, profile_preferences, fullscreen, wait_time, timeout, capabilities, headless, incognito, **kwargs)
76 firefox_options=firefox_options,
77 timeout=timeout,
---> 78 **kwargs
79 )
80
/home/osboxes/.local/lib/python2.7/site-packages/selenium/webdriver/firefox/webdriver.pyc in __init__(self, firefox_profile, firefox_binary, timeout, capabilities, proxy, executable_path, options, service_log_path, firefox_options, service_args, desired_capabilities, log_path, keep_alive)
162 service_args=service_args,
163 log_path=service_log_path)
--> 164 self.service.start()
165
166 capabilities.update(options.to_capabilities())
/home/osboxes/.local/lib/python2.7/site-packages/selenium/webdriver/common/service.pyc in start(self)
74 stdout=self.log_file,
75 stderr=self.log_file,
---> 76 stdin=PIPE)
77 except TypeError:
78 raise
/usr/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
392 p2cread, p2cwrite,
393 c2pread, c2pwrite,
--> 394 errread, errwrite)
395 except Exception:
396 # Preserve original exception in case os.close raises.
/usr/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
1045 raise
1046 child_exception = pickle.loads(data)
-> 1047 raise child_exception
1048
1049
OSError: [Errno 20] Not a directory
In [5]: b = Browser()
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-5-935d10992ede> in <module>()
----> 1 b = Browser()
/home/osboxes/.local/lib/python2.7/site-packages/splinter/browser.pyc in Browser(driver_name, *args, **kwargs)
62 except KeyError:
63 raise DriverNotFoundError("No driver for %s" % driver_name)
---> 64 return driver(*args, **kwargs)
/home/osboxes/.local/lib/python2.7/site-packages/splinter/driver/webdriver/firefox.pyc in __init__(self, profile, extensions, user_agent, profile_preferences, fullscreen, wait_time, timeout, capabilities, headless, incognito, **kwargs)
76 firefox_options=firefox_options,
77 timeout=timeout,
---> 78 **kwargs
79 )
80
/home/osboxes/.local/lib/python2.7/site-packages/selenium/webdriver/firefox/webdriver.pyc in __init__(self, firefox_profile, firefox_binary, timeout, capabilities, proxy, executable_path, options, service_log_path, firefox_options, service_args, desired_capabilities, log_path, keep_alive)
162 service_args=service_args,
163 log_path=service_log_path)
--> 164 self.service.start()
165
166 capabilities.update(options.to_capabilities())
/home/osboxes/.local/lib/python2.7/site-packages/selenium/webdriver/common/service.pyc in start(self)
74 stdout=self.log_file,
75 stderr=self.log_file,
---> 76 stdin=PIPE)
77 except TypeError:
78 raise
/usr/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
392 p2cread, p2cwrite,
393 c2pread, c2pwrite,
--> 394 errread, errwrite)
395 except Exception:
396 # Preserve original exception in case os.close raises.
/usr/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
1045 raise
1046 child_exception = pickle.loads(data)
-> 1047 raise child_exception
1048
1049
OSError: [Errno 20] Not a directory
Фон
Я использую следующие версии:
- Ubuntu 18 (64bit)
- Python версии 2.7
- Импортированная библиотека Python: версия splinter 0.9.0.
Я скачал и установил geckodriver
(версия: geckodriver-v0.23.0-linux64.tar.gz).
Для установки geckodriver
я использовал четырепошаговый метод на этот ответ в Ask Ubuntu :
Перейдите на страницу выпусков geckodriver .Найдите последнюю версию драйвера для вашей платформы и загрузите его.Например:
wget https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.18.0-linux64.tar.gz
ПРИМЕЧАНИЕ: самая последняя версия в настоящее время v0.28.0
Извлеките файл с помощью:
tar -xvzf geckodriver*
Сделайте его исполняемым:
chmod +x geckodriver
Добавьте драйвер к вашемуПУТЬ, чтобы другие инструменты могли его найти:
export PATH=$PATH:/path-to-extracted-file/geckodriver