此错误消息...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
...暗示ChromeDriver无法启动/产生新的WebBrowser,即Chrome浏览器会话。
您的代码试用和所有二进制文件的版本信息将为我们提供一些有关出问题的提示。
但是,根据将--disable-dev-shm-usage添加到默认启动标志,似乎添加该参数--disable-dev-shm-usage
将暂时解决该问题。
如果您希望启动/扩展新的Chrome浏览器会话,则可以使用以下解决方案:
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
禁用dev-shm-usage
根据base_switches.cc disable-dev-shm-usage
似乎仅在Linux OS上有效:
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif
在讨论中,添加使用/ tmp而不是/ dev / shm的选项 David提到:
我认为这将取决于如何安装/ dev / shm和/ tmp。如果它们都被安装为tmpfs,我假定不会有任何区别。如果/ tmp由于某种原因未映射为tmpfs(我认为systemd默认将其映射为tmpfs),则chrome共享内存管理在创建匿名共享文件时始终会将文件映射到内存中,因此即使在这种情况下也不应差异很大。我猜您可以在启用该标志的情况下强制进行遥测测试,并查看其进展情况。
至于为什么默认不使用它,这是共享内存团队推迟的,我想这应该在默认情况下将/ dev / shm用于共享内存是合理的。
最终,所有这些都应该转移到使用memfd_create上,但是我认为这不会很快发生,因为这将需要大量重构Chrome内存管理。
奥托罗
这是沙盒故事的链接。