Я работаю над сайтом с Python 3 и Django 1.6. Я хотел создать представление, которое отображает определенный элемент с моего сайта на png. Поэтому я использую Selenium для удаленного управления Firefox, чтобы получить определенную страницу с моего веб-сервера и получить скриншот для ответа. Следующий код написан для этой цели:Selenium застрял при подключении к Firefox
def do_get(self, *args, **kwargs):
from pyvirtualdisplay import Display
from selenium import webdriver
import base64
display = Display(visible=0, size=(200, 100))
display.start()
browser = webdriver.Firefox()
browser.get('http://www.google.com')
response = base64.b64decode(browser.get_screenshot_as_base64())
browser.quit()
display.stop()
return HttpResponse(content=response, mimetype='image/png')
Проблема заключается в том, что если я бегу код через консоль Python3 непосредственно в корневой все работает нормально. Но мой apache работает с другим пользователем без прав root. Когда я пытаюсь выполнить код с этим пользователем, код застрял в строке
browser = webdriver.Firefox()
Кажется, что Селен не может подключиться к Firefox, когда я прерву exection следующего TRACEBACK происходит:
Traceback (most recent call last):
File "test.py", line 6, in <module>
browser = webdriver.Firefox()
File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/webdriver.py", line 59, in __init__
self.binary, timeout),
File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
self.binary.launch_browser(self.profile)
File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 60, in launch_browser
self._start_from_profile_path(self.profile.path)
File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 83, in _start_from_profile_path
env=self._firefox_env).communicate()
File "/usr/lib/python3.4/subprocess.py", line 936, in communicate
stdout = _eintr_retry_call(self.stdout.read)
File "/usr/lib/python3.4/subprocess.py", line 487, in _eintr_retry_call
return func(*args)
Кажется, это проблема с правами пользователя, поэтому я изменил владельца установленного firefox на пользователя apache. Я могу запустить firefox с консоли с этим пользователем, но с веб-сервером проблема сохраняется. На моем сервере запущен экземпляр Ubuntu 14.04 LTS.
Любые идеи?
После спотыкаясь по этому вопросу, я понижен FF до версии 30, который в основном работает. Я уже дал Chrome короткий попробовать, но это больше сложно создать соединение от селена до Chrome, чем FF. Кроме того, это похоже на проблему с разрешением, я близок к обходному пути, надеюсь, что смогу запустить его. Спасибо за ваш ответ! – Gnietschow