0
我正在使用Python 3和Django 1.6的網站上工作。我想創建一個視圖,它將我網站上的特定元素呈現爲png。因此,我使用Selenium來遠程控制Firefox,從我的Web服務器獲取特定頁面並獲取響應的屏幕截圖。下面的代碼就是爲此而寫的:硒連接到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 (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實例。
任何想法?
絆倒這個問題後
Mozilla的支持suggests,我已經降級FF到版本30,這是基本的工作。我已經給了Chrome的一個短的嘗試,但它更很難建立從硒到Chrome的連接而不是FF。除此之外,它似乎是一個權限問題,我接近一個解決方法,希望我可以讓它運行。謝謝你的回答! – Gnietschow 2014-09-03 13:54:43