ElementNotVisibleException仅在虚拟显示中

时间:2016-02-24 16:02:59

标签: python selenium xvfb splinter

我有一个需要通过selenium与网页互动的脚本。我需要使用某种虚拟显示来防止浏览器出现。

整个脚本很有效,直到我将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,但问题与页面加载速度似乎没有任何关系。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是一种解决方法,而非直接解决方案:

我替换了这一行:

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

有了这个:

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

它可靠地工作。我仍然不确定为什么它在第一时间不起作用。