python 3.6 selenium webdriver 错误 X display is required for sending-keys unable to ues Xvfb

标签 python python-3.x selenium google-chrome selenium-webdriver

我正在使用 selenium webdriver.Chrome 为我的测试环境创建具有特定功能的网络驱动程序。

    class MyDriver(webdriver.Chrome):
          def __init__(self, executable_path="chromedriver", port=0,
              chrome_options=None, service_args=None,
              desired_capabilities=None, service_log_path=None):
          super().__init__(executable_path, port, chrome_options, service_args,
                      desired_capabilities, service_log_path)  
              # vdisplay = Xvfb()
              # vdisplay.start()

部分测试包括使用 element.send_keys(value) 发送 key , 测试运行良好,直到几天前它开始崩溃并显示以下消息:

"selenium.common.exceptions.WebDriverException: Message: unknown error: an X display is required for keycode conversions, consider using Xvfb (Session info: chrome=59.0.3071.115) (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.10.0-22-generic x86_64)"

我一遍又一遍地搜索和研究我不明白错误...

我正在使用:

  • python 3.6
  • Selenium
  • PyCharm
  • chromedriver linux_64bit 2.27.440175

我找到的唯一有用的链接是由 chromium 打开的错误在:https://bugs.chromium.org/p/chromedriver/issues/detail?id=1772但我不熟悉那里的工具...

我想知道是否有人有发送 key 或修复此错误的解决方案我已经尝试删除 chrome 并将其降级...它没有帮助!

如有任何帮助,我们将不胜感激!

谢谢

最佳答案

在 Xvfb 遇到这个问题很长时间后,我采用了一种新方法来运行不显示的 selenium 测试:

class MySolutionsDriver(webdriver.Chrome):
    def __init__(self, executable_path=PATH_chromedriver, port=0,
             chrome_options=None, service_args=None,
             desired_capabilities=None, service_log_path=None):
        # vdisplay = Xvfb()
        # vdisplay.start()

        # for full screen uncheck two lines below and import of Options
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--start-maximized')
        chrome_options.add_argument('disable-infobars')
        chrome_options.add_argument('--disable-extensions')
        chrome_options.add_argument('--no-sandbox')
        chrome_options.add_argument('--disable-dev-shm-usage')
        chrome_options.add_argument("--incognito")

        super().__init__(executable_path, port, chrome_options, service_args,
                     desired_capabilities, service_log_path)

使用 chrome_options 并使用 add_argument 函数添加参数,为了在不显示的情况下运行测试,我使用 >“--headless”。

除此之外,我发现了很多可以添加的好论据!

希望这可以帮助任何人解决这个问题。

PS:仅供引用 - Xvfb 不适用于 Windows(据我所知是 Microsoft 服务器)。

关于python 3.6 selenium webdriver 错误 X display is required for sending-keys unable to ues Xvfb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931403/

相关文章:

python-3.x - 如果分配了不同的字段类型,如何使使用数据类装饰的类抛出错误?

java - Selenium Java - 此版本的 ChromeDriver 仅支持 Chrome 版本 81

Python Multiprocessing 被 selenium 卡住了

python - 为什么 python 的列表切片不会产生索引越界错误?

python - 如何更改具有特定 id 的 QMenuBar 的子 css 样式表?

python - 从表中删除零

python - Firefox 工作但 PhantomJS 抛出无法使用 css 选择器找到元素

python - 强制从可能可迭代对象的列表/数组中创建一维 numpy 数组

python - 如何对具有多个关键属性的字典列表进行排序 - python

python - 给定 rpm 包名称,查询 yum 数据库以获取更新