2014-09-02 2 views
0

Я работаю над сайтом с 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.

Любые идеи?

ответ

0

Вы используете последнюю версию Firefox? Сегодня утром я обновился до версии 32, а плагин webdriver больше не поддерживается.

поддержка Mozilla suggests с помощью Chrome вместо понижения :-(

+0

После спотыкаясь по этому вопросу, я понижен FF до версии 30, который в основном работает. Я уже дал Chrome короткий попробовать, но это больше сложно создать соединение от селена до Chrome, чем FF. Кроме того, это похоже на проблему с разрешением, я близок к обходному пути, надеюсь, что смогу запустить его. Спасибо за ваш ответ! – Gnietschow

Смежные вопросы