Selenium ChromeDriver 给出 "InitializeSandbox() called with multiple threads in process gpu-process" 错误

Selenium ChromeDriver gives "InitializeSandbox() called with multiple threads in process gpu-process" error

我正在尝试使用 selenium chrome 驱动程序打开一个网站。我已经添加了一些我在其他类似问题中看到的论点,但它并没有解决问题。我基本上是这个代码:

 String baseUrl = "https://somesite.com";
 System.setProperty("webdriver.chrome.driver", "/usr/bin/google-chrome");
 ChromeDriverService service = ChromeDriverService.createDefaultService();
 ChromeOptions options = new ChromeOptions();
 options.addArguments("--start-maximized");
 options.addArguments("--disable-infobars");
 options.addArguments("--disable-gpu");
 options.addArguments("--disable-software-rasterizer");
 options.addArguments("no-sandbox");
 options.addArguments("headless");
 options.addArguments("--enable-native-gpu-memory-buffers");

 driver = new ChromeDriver(service, options);
 driver.get(baseUrl);

当我 运行 上述代码时,chrome 打开但页面没有改变。它还给出了这个输出:

[61263:61263:0903/005049.885829:ERROR:sandbox_linux.cc(374)] InitializeSandbox() called with multiple threads in process gpu-process.

为什么会这样?

注意:我的 OS 是 ubuntu 20.04.

这个错误信息...

ERROR:sandbox_linux.cc(374)] InitializeSandbox() called with multiple threads in process gpu-process.

...是一个常见的 Google Chrome 错误,当尝试 运行 它时 Linux 由于 Chrome 的 GPU 使用。

首先,System.setProperty()行接受绝对路径的keywebdriver.chrome.drivervalue。所以而不是:

System.setProperty("webdriver.chrome.driver", "/usr/bin/google-chrome");

您需要:

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

结尾

通常可以通过使用以下标志避免 GPU 硬件加速来解决此错误:

  • --disable-gpu:禁用GPU硬件加速。如果软件渲染器未到位,则 GPU 进程将不会启动
  • --disable-software-rasterizer: 禁止使用 3D 软件光栅器

代码片段:

options.addArguments("--disable-gpu");
options.addArguments("--disable-software-rasterizer");