URL を使用して Chrome を起動しようとすると、ブラウザが起動しますが、その後は何も起こりません。
1 分後に以下のエラーが表示されます。
Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
(Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)
私の設定:
- クローム:66
- Chromeブラウザ: 2.39.56
PS Firefoxではすべて正常に動作します
ベストアンサー1
経験則
起動時に Chrome がクラッシュする一般的な原因は、Linux 上で Chrome を
root
ユーザー (administrator
) として実行していることです。WebDriver セッションの作成時にフラグを渡すことでこの問題を回避することは可能ですが--no-sandbox
、このような構成はサポートされていないため、強くお勧めしません。代わりに、通常のユーザーとして Chrome を実行するように環境を構成する必要があります。
このエラーメッセージは...
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 の使用を無効にする
に従ってベーススイッチ.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 としてマップされていると思います)、Chrome 共有メモリ管理は匿名共有ファイルを作成するときに常にファイルをメモリにマップするため、その場合でも大きな違いはありません。フラグを有効にしてテレメトリ テストを強制して、どうなるかを確認できると思います。
なぜデフォルトで使用しないのかについては、共有メモリ チームによって押し戻されましたが、共有メモリにはデフォルトで /dev/shm を使用するのが理にかなっていると思います。
最終的には、これらすべてを memfd_create を使用するように移行する必要がありますが、Chrome のメモリ管理を大幅にリファクタリングする必要があるため、すぐには実現しないと思います。
参照
詳細な議論は以下でいくつか見つかります:
- 不明なエラー: Ubuntu で Selenium UI テスト ケースを実行しているときに DevToolsActivePort ファイルが存在しないというエラーが発生する
- systemd 経由で Selenium グリッドを実行すると、不明なエラーが発生してテストがすぐに失敗します: DevToolsActivePort ファイルが存在しません
アウトロ
リンクはこちらサンドボックス話。