【问题标题】:Is it possible to run selenium (Firefox) web driver without a GUI?是否可以在没有 GUI 的情况下运行 selenium (Firefox) Web 驱动程序?
【发布时间】:2012-05-11 02:09:09
【问题描述】:

我们正在考虑将我们的生产服务器从 Ubuntu-desktop 10.04 升级到 Ubuntu-server 12.04。

我们在当前的桌面操作系统上运行各种服务,例如 Selenium Web Driver。我的问题是 Selenium Web 驱动程序可以从基于 cli 的系统运行吗?

我的直接想法是它不能,因为它依赖于 Firefox,但我希望有人证明我错了!

【问题讨论】:

标签: ubuntu selenium webdriver


【解决方案1】:

Chrome 现在有无头模式:

op = webdriver.ChromeOptions()
op.add_argument('--headless')
driver = webdriver.Chrome(options=op)

【讨论】:

  • PhantomJS 目前没有积极开发。 Git 存储库已归档。
  • Selenium 也停止支持 PhantomJS,并显示以下消息“用户警告:Selenium 对 PhantomJS 的支持已被弃用,请改用无头版本的 Chrome 或 Firefox”
  • Python 3.8: 'headless' 不起作用,但是 '--headless' 起作用了。
  • 上次我检查过,--headless 甚至可以与 FirefoxOptions() 一起使用
【解决方案2】:

安装并运行容器化 Firefox:

docker pull selenium/standalone-firefox
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-firefox

使用webdriver.Remote连接:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')

【讨论】:

    【解决方案3】:

    也许您需要设置窗口大小。就像:

    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument('--window-size=1920x1080');
    
    browser = webdriver.Chrome(options=options,executable_path = './chromedriver')
    

    如果也不起作用,请尝试增加窗口大小。

    【讨论】:

      【解决方案4】:

      是的,你可以在没有浏览器的情况下运行测试脚本,但你应该在无头模式下运行它们。

      【讨论】:

        【解决方案5】:

        更新:您不再需要 XVFB 来运行无头 Firefox。 Linux 上的 Firefox v55+ 和 Windows/Mac 上的 Firefox v56+ 现在支持无头执行。

        我在这里添加了一些使用方法文档:

        https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java

        【讨论】:

        • 评论不用于扩展讨论;这个对话是moved to chat
        • 这对我不起作用。我不确定,但我认为 XVFB 仍然是必需的。
        • 我已经在 Firefox 和 Chrome 上使用无头浏览器好几年了。 Selenium 的 WebDriver 接口现在甚至支持 setHeadless 参数。
        【解决方案6】:

        一个可选的方法是像这样使用pyvirtualdisplay

        from pyvirtualdisplay import Display
        
        display = Display(visible=0, size=[800, 600])
        display.start()
        
        #do selenium job here
        
        display.close()
        

        更短的版本是:

        with Display() as display:
            # selenium job here
        

        这一般是xvfb的python封装,不知何故更方便。

        顺便说一句,虽然PhantomJS 是一个无头浏览器,使用它时不会打开任何窗口,但PhantomJS 似乎仍然需要 gui 环境才能工作。

        当我在无头模式下使用 PhantomJS() 而不是 Firefox()(腻子连接控制台)时,我得到了错误代码 -6。但是在桌面环境中一切正常。

        【讨论】:

          【解决方案7】:

          您要查找的是

          是的,可以在 Firefox 上无头运行 Selenium。这是您可以关注的post

          这里是设置 Xvfb 的简要步骤

          #install Xvfb
          sudo apt-get install xvfb
          
          #set display number to :99
          Xvfb :99 -ac &
          export DISPLAY=:99    
          
          #you are now having an X display by Xvfb
          

          【讨论】:

          • 这工作并支持截图。我用这个。它也适用于谷歌浏览器。
          • 我认为这不再有效(至少不容易,因为它需要一个新的 geckodriver,就像 chrome 一样)
          • @ArchimedesTrajano 这仍然有效。这些说明用于使用 Xvfb 创建虚拟显示器,而不是用于安装和配置 Selenium(需要在路径上包含 geckodriver)。
          • 我喜欢在 Python 中执行此操作,您可以使用 subprocess.Popen('Xvfb...')os.system('Xvfb...') 执行此操作,但请确保在导入网络驱动程序之前执行此操作。
          • 该链接现已损坏
          【解决方案8】:

          是的。您可以在启动 webdriver 时使用 HTMLUnitDriver 代替 FirefoxDriver。这是无头浏览器设置。详情可见here

          【讨论】:

          • 是否支持save_screenshot()等函数? coreygoldberg.blogspot.co.uk/2011/06/…
          • 没有尝试过,但它可能是可行的,因为您实际上仍在创建 UI,但在“虚拟”窗口中显示它。
          • HTMLUnitDriver 将不支持捕获屏幕截图,因为根本不会呈现内容(问题 1361)。我能想到的另一种方法是使用 getHTMLSource 并显示 HTML 页面而不是屏幕截图。
          【解决方案9】:

          另一个选项是 GhostDriver,现在 WebDriver 正式支持它:Ghostdriver actual performance gain

          【讨论】:

            【解决方案10】:

            请注意,HtmlUnitDriver webclient 是单线程的,而 Ghostdriver 仅占 WebDriver 功能的 40%。

            尽管如此,Ghostdriver 可以正常运行以进行测试,但我无法将其连接到 WebDriver 集线器。

            【讨论】:

            • 这是否提供了其他答案没有提供的任何新信息?
            【解决方案11】:

            如果您想要无头浏览器支持,那么您可以采用另一种方法。

            https://github.com/detro/ghostdriver

            它是在 Selenium 会议期间宣布的,目前仍在开发中。它使用 PhantomJS 作为浏览器,比 HTMLUnitDriver 好得多,还没有截图,但它仍在积极开发中。

            【讨论】:

              猜你喜欢
              • 2021-07-07
              • 1970-01-01
              • 2011-09-22
              • 1970-01-01
              • 1970-01-01
              • 2016-08-14
              • 1970-01-01
              • 2014-10-23
              • 2014-02-23
              相关资源
              最近更新 更多