连接到Firefox时Selenium卡住了

时间:2014-09-02 12:33:56

标签: django firefox ubuntu selenium python-3.x

我正在使用Python 3和Django 1.6开发一个网站。我想创建一个视图,它将我网站中的特定元素呈现为png。因此,我使用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控制台直接以root身份运行代码,一切正常。但我的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)

这似乎是一个用户权限问题,因此我将已安装的firefox的所有者更改为我的apache用户。我可以使用此用户从控制台运行firefox,但是使用Web服务器时问题仍然存在。我的服务器正在运行Ubuntu 14.04 LTS实例。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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