2014-09-02 54 views
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實例。

任何想法?

回答

0

您使用的是Firefox的最新版本?今天早上我升級到了32版,並且不再支持webdriver插件。使用Chrome,而不是降級:-(

+0

絆倒這個問題後

Mozilla的支持suggests,我已經降級FF到版本30,這是基本的工作。我已經給了Chrome的一個短的嘗試,但它更很難建立從硒到Chrome的連接而不是FF。除此之外,它似乎是一個權限問題,我接近一個解決方法,希望我可以讓它運行。謝謝你的回答! – Gnietschow 2014-09-03 13:54:43