【发布时间】:2014-09-02 12:33:56
【问题描述】:
我正在使用 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')
问题是,如果我直接以 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)
这似乎是用户权限问题,因此我将已安装的 firefox 的所有者更改为我的 apache 用户。我可以使用该用户从控制台运行 Firefox,但使用网络服务器时问题仍然存在。我的服务器正在运行 Ubuntu 14.04 LTS 实例。
有什么想法吗?
【问题讨论】:
标签: django firefox ubuntu selenium python-3.x