我有一个需要通过selenium与网页互动的脚本。我需要使用某种虚拟显示来防止浏览器出现。
整个脚本很有效,直到我将Xvfb引入混音。当我这样做时,我第一次尝试与页面进行交互时得到ElementNotVisibleException
。
我尝试使用xvfbwrapper
和pyvirtualdisplay
具有相同的效果。
这里的代码不起作用:
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 :(得分:0)
这是一种解决方法,而非直接解决方案:
我替换了这一行:
oBrowser.find_by_id('some_field')[0].fill(sValue)
有了这个:
oBrowser.execute_script("document.getElementById('some_field').value = {}".format(sValue))
它可靠地工作。我仍然不确定为什么它在第一时间不起作用。