このエラーメッセージ...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
... ChromeDriverが新しいWebBrowser、つまりChrome Browserセッションを開始または起動できなかったことを意味します。
コードのトライアルとすべてのバイナリのバージョン情報により、何が問題なのかについてのヒントが得られます。
ただし、デフォルトの起動フラグに--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");
disable-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
ディスカッションで、/ dev / shmの代わりに/ tmpを使用するオプションを追加します。
/ dev / shmと/ tmpがどのようにマウントされているかに依存すると思います。両方がtmpfsとしてマウントされている場合、違いはないと想定しています。何らかの理由で/ tmpがtmpfsとしてマップされていない場合(そしてsystemdによってデフォルトでtmpfsとしてマップされていると思います)、クロム共有メモリ管理は、匿名の共有ファイルを作成するときに常にファイルをメモリにマップするため、そのような場合でも多くの違い。フラグを有効にしてテレメトリテストを強制し、その状態を確認できると思います。
なぜデフォルトで使用しないのかについては、それは共有メモリチームによって押し戻されました。デフォルトで共有メモリに/ dev / shmを使用する必要があるのは理にかなっていると思います。
最終的には、これらすべてがmemfd_createを使用するように移行するはずですが、Chromeのメモリ管理を大幅にリファクタリングする必要があるため、それがすぐに発生することはないと思います。
アウトロ
サンドボックスストーリーへのリンクは次のとおりです。