我试图运行一个使用Selenium Firefox webdriver运行多个测试的脚本。 它在本地机器上运行完美,但在xvfb上运行失败。
该机器是CentOS 6.8版(最终版) Firefox版本45.6.0
我使用Python / Marionette
该命令与此类似:
xvfb-run --server-args="-screen 0, 1920x1080x24" MyProgram
以这种方式运行我得到了几个与未加载页面相关的错误。 所以我得到了一些截图,我看到的只是"无法连接" Firefox屏幕。
起初我虽然它可能与代理相关......我已经暗示没有禁用代理和一个简单的" wget"会按预期工作。 但后来我在代码中强制使用Firefox首选项,所以它没有使用代理,当然,对吗?
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 0)
结果相同。 所以我用Google搜索了类似的情况,并找到了一些要求在命令行中添加显示号的答案。 所以我将命令行更改为:
export DISPLAY=:1
xvfb-run --server-args=":1 -screen 0, 1920x1080x24" MyProgram
然后我得到了一个不同的错误,但仍然无法正常工作:
ERROR: WebDriverException: connection refused Traceback (most recent call last):
我还尝试记录更多信息,将 -e 参数添加到xvfb-run,但我得到的只是一个空文件。
知道我还能尝试使其有效吗?
*更新*
这是一个重现问题的小代码
from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.proxy import *
display = Display(visible=0, size=(1920, 1080))
display.start()
profile = webdriver.FirefoxProfile()
profile.set_preference("network.http.phishy-userpass-length", 255);
profile.set_preference("network.proxy.type", 0)
capabilities = None
# Marionette not necessary as it's Firefox 45
# capabilities = DesiredCapabilities.FIREFOX
# capabilities["marionette"] = True
print("Getting webdriver...")
browser = webdriver.Firefox(firefox_profile=profile, capabilities=capabilities)
print("Requesting URL...")
browser.get('https://www.google.com')
print("TITLE:", browser.title)
browser.quit()
display.stop()
输出:
Getting webdriver...
Requesting URL...
TITLE: Problem loading page