我正在使用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实例。
有什么想法吗?
答案 0 :(得分:0)
您使用的是最新版本的Firefox吗?我今天早上升级到32版,不再支持webdriver插件。
使用Chrome而不是降级的Mozilla支持suggests: - (