我在一台远程服务器上运行了一个Java Webapp,该应用程序使用的是ApacheTomcat/10.0.23,该服务器实现了seleniumchromeDriver.每当我创建Web驱动程序时,它都会返回一个HTTP状态500-内部服务器错误.

谷歌-Chrome位置:

/usr/bin/google-chrome /usr/share/man/man1/google-chrome.1.gz 

谷歌-Chrome版本:

110.0.5481.77

ChromeDriver位置:

/usr/bin/chromedriver 

ChromeDriver版本:

110.0.5481.77 (65ed616c6e8ee3fe0ad64fe83796c020644d42af-refs/branch-heads/5481@{#839})

selenium

<dependency>
       <groupId>org.seleniumhq.selenium</groupId>
       <artifactId>selenium-java</artifactId>
       <version>4.8.0</version>
</dependency>

错误:

<body>
    <h1>HTTP Status 500 – Internal Server Error</h1>
    <hr class="line" />
    <p><b>Type</b> Exception Report</p>
    <p><b>Message</b> Could not start a new session. Response code 500. Message: unknown error: Chrome failed to start:
        crashed.</p>
    <p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.
    </p>
    <p><b>Exception</b></p>
    <pre>org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: unknown error: Chrome failed to start: crashed.
  (unknown error: DevToolsActivePort file doesn&#39;t exist)
  (The process started from chrome location &#47;usr&#47;bin&#47;google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) 
Host info: host: &#39;ip-xxxxxxxxxx2&#39;, ip: &#39;127.0.0.1&#39;
Build info: version: &#39;4.8.0&#39;, revision: &#39;267030adea&#39;
System info: os.name: &#39;Linux&#39;, os.arch: &#39;amd64&#39;, os.version: &#39;5.10.0-21-cloud-amd64&#39;, java.version: &#39;11.0.15.1&#39;
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {browserName: chrome, goog:chromeOptions: {args: [--headless=new, --disable-dev-shm-usage, --no-sandbox], extensions: []}, pageLoadStrategy: eager}], desiredCapabilities=Capabilities {browserName: chrome, goog:chromeOptions: {args: [--headless=new, --disable-dev-shm-usage, --no-sandbox], extensions: []}, pageLoadStrategy: eager}}]
    org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:148)
    org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:106)
    org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:67)
    org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:156)
    org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:167)
    org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:142)
    org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
    org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:229)
    org.openqa.selenium.remote.RemoteWebDriver.&lt;init&gt;(RemoteWebDriver.java:157)
    org.openqa.selenium.chromium.ChromiumDriver.&lt;init&gt;(ChromiumDriver.java:101)
    org.openqa.selenium.chrome.ChromeDriver.&lt;init&gt;(ChromeDriver.java:82)
    org.openqa.selenium.chrome.ChromeDriver.&lt;init&gt;(ChromeDriver.java:71)
    com.fourdcontrols.servlets.TestServlet.doGet(TestServlet.java:29)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:668)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre>
    <p><b>Note</b> The full stack trace of the root cause is available in the server logs.</p>
    <hr class="line" />
    <h3>Apache Tomcat/10.0.23</h3>
</body>

日志(log):

Starting ChromeDriver 110.0.5481.77 (65ed616c6e8ee3fe0ad64fe83796c020644d42af-refs/branch-heads/5481@{#839}) on port 3125
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

推荐答案

经验法则

Chrome在启动期间崩溃的一个常见原因是在Linux上以100用户(101)身份运行Chrome.虽然可以通过在创建WebDriver会话时传递--no-sandbox标志来解决此问题,但不支持这样的配置,并且强烈建议您这样做.您需要将您的环境配置为以普通用户身份运行Chrome.


参考文献

您可以在以下位置找到几个相关的详细讨论和文档:

Linux相关问答推荐

GO:当使用NewManager调用创建cgroup时,权限被拒绝

git别名函数可以用单引号写吗?

为什么将JAX与Docker一起安装会创建如此大的镜像?

在 Linux 上的 std::threads 中创建子进程

Qt会泄漏内存吗?

sed:用空格替换

中的换行符

如何更改文件的上次访问/修改/更改日期?

如何拆分多个分隔符但将它们保留在方括号之间?

Azure Nvidia 中的 apt-update 给出公钥错误

std::system 使用什么Shell?

为什么 Linux (x86) 的页面大小是 4 KB,这是如何计算的?

查看 linux 上的多核或多 CPU 利用率

如何使用多个版本的 GCC

RealUID,保存的 UID,有效的 UID.这是怎么回事?

C hello world 的汇编输出的每一行是什么意思?

从 Linux shell 将多个文件从一个目录复制到另一个目录

无法在 Android Studio 中清理项目

以原子方式移动目录

在Linux中使用空格设置环境变量

Linux shell 中的排序和唯一性