Python Ubuntu服务器中的Selelum Headless,轻微错误“;我们还没来得及连接,浏览器就已经退出了;

Python Ubuntu服务器中的Selelum Headless,轻微错误“;我们还没来得及连接,浏览器就已经退出了;,python,ubuntu,selenium,headless,Python,Ubuntu,Selenium,Headless,所以我在Ubuntu服务器VM上运行Selenium,但有一个小问题。当我启动虚拟机并运行Selenium测试脚本时,我收到以下错误:Selenium.common.exceptions.WebDriverException:Message:“浏览器似乎在我们可以连接之前已退出”。现在,如果在运行任何Selenium测试脚本之前在终端中执行这个export DISPLAY=:99。所有测试无头运行 我的问题是你们是否知道如何在启动时执行这个命令。因此,在运行Selenium测试脚本之前,我不必在

所以我在Ubuntu服务器VM上运行Selenium,但有一个小问题。当我启动虚拟机并运行Selenium测试脚本时,我收到以下错误:Selenium.common.exceptions.WebDriverException:Message:“浏览器似乎在我们可以连接之前已退出”。现在,如果在运行任何Selenium测试脚本之前在终端中执行这个export DISPLAY=:99。所有测试无头运行

我的问题是你们是否知道如何在启动时执行这个命令。因此,在运行Selenium测试脚本之前,我不必在终端中运行这个。我已尝试将其添加到/etc/rc.local文件中。但这似乎不起作用

我还尝试在Selenium测试脚本开始时执行它。通过添加这个(我正在使用python)

关于如何做到这一点,有什么建议吗?
提前感谢

这行不通:

os.system("export DISPLAY=:99")
因为
system()
启动一个新的shell,并且shell将在完成时关闭,这只会影响一个非常短暂的进程的环境。(子进程不能影响其父进程的环境。如果父进程在执行子进程之前进行更改,则只能影响其子进程的环境。)

您可以选择几个不同的机制来设置
显示

  • 在启动测试机制的脚本中设置它

    如果系统可能执行其他任务,这尤其好,因为这将影响尽可能小。在Python中,这看起来像:

    os.environ["DISPLAY"]=":99"
    
    export DISPLAY=:99
    
    bash(1)
    中,这看起来像:

    os.environ["DISPLAY"]=":99"
    
    export DISPLAY=:99
    
  • 在运行测试的用户帐户的登录脚本中设置它

    如果运行测试的用户帐户永远不需要
    DISPLAY
    变量,这就很好了。(但是如果用户通过
    ssh-X登录testinguser@machine…
    这将破坏通常的
    ssh(1)
    X会话转发。)

    将其添加到用户的
    ~/.bashrc
    ~/.profile
    ~/.bash\u profile
    。(有关文件之间的差异,请参见
    bash(1)

  • 为所有用户将其设置为登录。如果系统上的多个用户帐户将运行测试脚本,并且您只想让它对所有用户都起作用,那么这很好。您不关心用户是否有用于X转发的
    显示

    编辑
    /etc/environment
    以添加新变量。
    pam_env(8)
    pam模块将为在
    /etc/pam.d/
    配置目录中配置为使用
    pam_env(8)
    的任何服务下进行身份验证的所有用户帐户设置环境变量。(这听起来比实际情况更复杂——有些服务希望经过身份验证的用户设置环境变量,而有些服务不这样做。)


    • 这是行不通的:

      os.system("export DISPLAY=:99")
      
      因为
      system()
      启动一个新的shell,并且shell将在完成时关闭,这只会影响一个非常短暂的进程的环境。(子进程不能影响其父进程的环境。如果父进程在执行子进程之前进行更改,则只能影响其子进程的环境。)

      您可以选择几个不同的机制来设置
      显示

      • 在启动测试机制的脚本中设置它

        如果系统可能执行其他任务,这尤其好,因为这将影响尽可能小。在Python中,这看起来像:

        os.environ["DISPLAY"]=":99"
        
        export DISPLAY=:99
        
        bash(1)
        中,这看起来像:

        os.environ["DISPLAY"]=":99"
        
        export DISPLAY=:99
        
      • 在运行测试的用户帐户的登录脚本中设置它

        如果运行测试的用户帐户永远不需要
        DISPLAY
        变量,这就很好了。(但是如果用户通过
        ssh-X登录testinguser@machine…
        这将破坏通常的
        ssh(1)
        X会话转发。)

        将其添加到用户的
        ~/.bashrc
        ~/.profile
        ~/.bash\u profile
        。(有关文件之间的差异,请参见
        bash(1)

      • 为所有用户将其设置为登录。如果系统上的多个用户帐户将运行测试脚本,并且您只想让它对所有用户都起作用,那么这很好。您不关心用户是否有用于X转发的
        显示

        编辑
        /etc/environment
        以添加新变量。
        pam_env(8)
        pam模块将为在
        /etc/pam.d/
        配置目录中配置为使用
        pam_env(8)
        的任何服务下进行身份验证的所有用户帐户设置环境变量。(这听起来比实际情况更复杂——有些服务希望经过身份验证的用户设置环境变量,而有些服务不这样做。)


      为什么不将其包含在脚本中,并将其源代码或添加到~/.bash\u配置文件中好的,我将尝试将其添加到~/.bash\u配置文件中。让你知道这是否有效。谢谢你为什么不把它包含在脚本中,并将其作为源代码或添加到~/.bash_profile中好的,我会尝试将它添加到~/.bash_profile中。让你知道这是否有效。谢谢