2016-02-24 36 views
0

我有一個腳本需要通過硒與網頁進行交互。我需要使用某種虛擬顯示器來防止瀏覽器出現。ElementNotVisibleException僅在虛擬顯示中

這個腳本作爲一個整體很有效,直到我將Xvfb引入混合中。當我這樣做時,我第一次嘗試與該頁面進行交互時遇到了ElementNotVisibleException

我試過使用xvfbwrapperpyvirtualdisplay,效果相同。

這裏是代碼不起作用:

from xvfbwrapper import Xvfb 
vdisplay = Xvfb() 
vdisplay.start() 
oBrowser = Browser() 
oBrowser.visit(sUrl) 
oBrowser.find_by_id('some_field')[0].fill(sValue) #<--ERROR 
vdisplay.stop() 

這裏是不工作(但會顯示瀏覽器)的代碼:

oBrowser = Browser() 
oBrowser.visit(sUrl) 
oBrowser.find_by_id('some_field')[0].fill(sValue) #<--works every time 

所以,我怎麼能我的代碼運行在虛擬顯示器上?

在嘗試填充字段之前,我已嘗試做一個time.sleep,但問題似乎與緩慢加載頁面沒有任何關係。有任何想法嗎?

+0

呃......你的標籤是錯誤的:看起來你正在使用分裂(https://splinter.readthedocs.org/en/latest/),而不是硒蟒蛇綁定(http://selenium-python.readthedocs。組織/獲取-started.html)。 –

+0

@KirilS。指出。斯普林特是通過硒來達到魔法的,因此事情的根源是硒問題 – Sheena

回答

0

這是一個解決方法不是直接的解決方案的更多:

我換成這一行:

oBrowser.find_by_id('some_field')[0].fill(sValue) 

有了這個:

oBrowser.execute_script("document.getElementById('some_field').value = {}".format(sValue)) 

它工作可靠。儘管如此,我仍不確定爲什麼它不僅僅能夠工作。