Django Selenium在连接Firefox时被卡住

Django Selenium在连接Firefox时被卡住,django,firefox,ubuntu,selenium,python-3.x,Django,Firefox,Ubuntu,Selenium,Python 3.x,我正在使用Python 3和Django 1.6开发一个网站。我想创建一个视图,将我的站点中的特定元素呈现为png。因此,我使用Selenium远程控制Firefox,从我的Web服务器获取特定页面,并获取响应的屏幕截图。为此目的编写了以下代码: def do_get(self, *args, **kwargs): from pyvirtualdisplay import Display from selenium import webdriver import base

我正在使用Python 3和Django 1.6开发一个网站。我想创建一个视图,将我的站点中的特定元素呈现为png。因此,我使用Selenium远程控制Firefox,从我的Web服务器获取特定页面,并获取响应的屏幕截图。为此目的编写了以下代码:

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')
问题是,如果我直接以root用户身份通过python3控制台运行代码,那么一切都正常。但是我的apache使用的是另一个没有root权限的用户。当我试图与这个用户一起执行代码时,代码被卡在了行中

browser = webdriver.Firefox()
Selenium似乎无法连接到Firefox,当我在回溯发生后中断执行时:

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)
回溯(最近一次呼叫最后一次):
文件“test.py”,第6行,在
browser=webdriver.Firefox()
文件“/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/webdriver.py”,第59行,在__
self.binary,超时),
文件“/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/extension\u connection.py”,第47行,在__
self.binary.launch_浏览器(self.profile)
文件“/usr/local/lib/python3.4/dist packages/selenium/webdriver/firefox/firefox\u binary.py”,第60行,在启动浏览器中
self.\u从配置文件路径开始(self.profile.path)
文件“/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox\u binary.py”,第83行,在\u start\u from\u profile\u路径中
env=self.\u firefox\u env.communicate()
文件“/usr/lib/python3.4/subprocess.py”,第936行
stdout=\u eintr\u retry\u调用(self.stdout.read)
文件“/usr/lib/python3.4/subprocess.py”,第487行,在重试调用中
返回函数(*args)
这似乎是一个用户权限问题,因此我将已安装firefox的所有者更改为apache用户。我可以使用该用户从控制台运行firefox,但在Web服务器上,问题仍然存在。我的服务器正在运行一个Ubuntu 14.04 LTS实例


有什么想法吗?

您使用的是最新版本的Firefox吗?今天早上我升级到32版,不再支持webdriver插件


使用Chrome而不是降级的Mozilla支持:-(

在遇到这个问题后,我将FF降级到了版本30,基本上可以正常工作。我已经给了Chrome一个简短的尝试,但要建立从selenium到Chrome的连接比FF更困难。除此之外,这似乎是一个权限问题,我已经接近解决方法,希望我可以运行它。感谢您的支持哇!