WebDriverException:不明なエラー:Chromeブラウザを開始しようとしたときにDevToolsActivePortファイルが存在しません


152

私は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
  • ChromeBrowser:2.39.56

PSすべてがFirefoxで正常に動作する


1
このエラーの原因となっているコードで質問を更新できますか?
GPT14

vncserverがクラッシュし、Xディスプレイがなくなったときにこのエラーを受け取りました
xtian

回答:


71

このエラーメッセージ...

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のメモリ管理を大幅にリファクタリングする必要があるため、それがすぐに発生することはないと思います。


アウトロ

サンドボックスストーリーへのリンクは次のとおりです。


8
しかしDevToolsActivePort file doesn't exist、に関するこの特定のエラーの原因は何ですか?なぜ突然ポップアップし始めたのですか?

3
「追加の考慮事項」項目-この問題にかなり当てはまるようです。特に、問題の原因が正確に特定されていないこのような状況。
ピートケリー

5
@DebanjanBの投稿の削除された部分から、これはインストールされているChromeのバージョンをサポートしていないChromedriverを使用していることが原因である可能性があります。これは、たとえば、ChromedriverをアップグレードせずにChromeをアップグレードした場合に発生する可能性があります。
expz

これは私の問題を解決するために使用されましたが、現在のシステム(Ubuntu 18 + Python 3.7)では機能しません
tw0000

3
これが他の人を助ける場合、追加するだけdisable-dev-shm-usageでは不十分でした。--no-sandboxそれを機能させるためにも追加する 必要がありました。これは私にとってSelenium-javaの完全な修正でした:chromeOptions.addArguments("--no-sandbox", "--disable-dev-shm-usage");
George Pantazes

52

2018-06-04月曜日にこの問題が発生し始めました。テストは毎週実行されます。変更されたのは、google-chromeバージョン(現在にアップデートされたもの)のJVMとSeleniumだけがLinuxボックスの最新バージョン(Java 1.8.0_151、selenium 3.12.0、google-chrome 67.0.3396.62、 xvfb-run)。
具体的には、引数「--no-sandbox」および「--disable-dev-shm-usage」を追加するとエラーが発生しなくなりました。これらの問題を調べて、効果に関する詳細情報と、google-chromeの更新をトリガーした原因などのその他の質問を見つけます。

ChromeOptions options = new ChromeOptions();
        ...
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");

このコードは毎週Ubuntu Linuxボックスで実行されていましたが、Windowsデスクトップの同等のコードは月曜日でも問題なく動作しました。DevToolsActivePortファイルの機能が何であるかについての情報は見つかりませんでした。それも役に立ちます。PK
ピートケリー

1
これらのオプションは私にとってもエラーを止めました。pd:Railsスタックを使用します。
マリオ・ペレス

これでも[java] [1536892035.965][SEVERE]: Timed out receiving message from renderer: 60.000エラーが発生します
ジョナサン

@ジョナサン-こんにちは!どのOS、どのバージョンのコンポーネントを使用しているのか、プロセスをどのように呼び出しているのかなど、さらに詳細な情報を提供できますか?
ピートケリー

@Toby:こんにちは!位置が変化することを意味するつもりはなく、これらのパラメーターの最小限の使用のみです。アップグレードが行われたときに、私が依存していたデフォルト値の一部が変更されたようです。あなたが提供するあなたのシステムやメッセージに関する他のどんな詳細も助けになるかもしれません。
ピートケリー

34

jenkinsスレーブ(Linuxマシン)でも同じ問題が発生し、上記のすべてのオプションを試しました。

助けられた唯一のものは引数を設定することです

chrome_options.add_argument('--headless')

しかし、さらに調査したところ、XVFB画面がプロパティを開始せず、それがこのエラーの原因であることに気付きました。XVFB画面を修正した後、問題は解決しました。


2
これにより、C#を使用して実行したときの問題が解決しました(この場合、オプションは次のようになります:options.AddArgument( "
-headless

私にとってXVFBが問題でした
lucaswxp

23

Pythonでも同じ問題が発生しました。上記は役に立ちました。これが私がPythonで使用したものです-

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options)

私はChromeのアップグレードで問題を解決しました(既に最新のchromedriveを使用していた)ため、通常のブラウザーもアップグレードする必要がありました。
axel_ande 2018

18

更新:

私は問題を乗り越えることができました、そして今私は望ましいURLでクロムにアクセスすることができます。

提供されたソリューションを試した結果:

上記の設定をすべて試しましたが、問題を解決できませんでした

問題に関する説明:

私の観察によると、DevToolsActivePortファイルが存在しないのは、chromeがscoped_dirXXXXXフォルダでその参照を見つけられない場合に発生します。

問題を解決するために取られた手順

  1. すべてのChromeプロセスとChromeドライバープロセスを終了しました。
  2. クロムを呼び出すために以下のコードを追加しました

    System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe");    
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(options);
    driver.get(url);
    

上記の手順を使用して、問題を解決することができました。

ご回答ありがとうございます。


3
useAutomationExtensionの影響を知っていますか?自動化の拡張機能(スクリーンショット/コントロールなど)を無効にしますか?DevToolsの登場により、この変更による影響はないのではないでしょうか?codereview.chromium.org/2785413002
トビー

10

私は最近同じ問題に直面していました、そしていくつかの試行錯誤の後にそれは私にとってもうまくいきました。

上にする必要があります:

options.addArguments("--no-sandbox"); //has to be the very first option

BaseSeleniumTests.java

public abstract class BaseSeleniumTests {

    private static final String CHROMEDRIVER_EXE = "chromedriver.exe";
    private static final String IEDRIVER_EXE = "IEDriverServer.exe";
    private static final String FFDRIVER_EXE = "geckodriver.exe";
    protected WebDriver driver;

    @Before
    public void setUp() {
        loadChromeDriver();
    }

    @After
    public void tearDown() {
        if (driver != null) {
            driver.close();
            driver.quit();
        }
    }

    private void loadChromeDriver() {
        ClassLoader classLoader = getClass().getClassLoader();
        String filePath = classLoader.getResource(CHROMEDRIVER_EXE).getFile();
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        ChromeDriverService service = new ChromeDriverService.Builder()
                .usingDriverExecutable(new File(filePath))
                .build();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--no-sandbox"); // Bypass OS security model, MUST BE THE VERY FIRST OPTION
        options.addArguments("--headless");
        options.setExperimentalOption("useAutomationExtension", false);
        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.merge(capabilities);
        this.driver = new ChromeDriver(service, options);
    }

}

GoogleSearchPageTraditionalSeleniumTests.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class GoogleSearchPageTraditionalSeleniumTests extends BaseSeleniumTests {

    @Test
    public void getSearchPage() {
        this.driver.get("https://www.google.com");
        WebElement element = this.driver.findElement(By.name("q"));
        assertNotNull(element);
    }

}

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

面白い !どのように.sideファイルを生成しますか?これはQA担当者が手動で行うことですか?
Nital

Selenium IDEを使用してテストを記録します。結果は.sideファイルです。IDEを使用しても問題なく動作しますが、セレンサイドランナーを使用して実行しようとしていますが、chromedriverであらゆる種類の問題が発生しています。
パブラム

最初のオプションでなければなりません
cuniculus

ありがとう!「--no-sandbox」を追加すると、問題が解決します。
マタバレス

7

私の場合、次の環境で:

  • ウインドウズ10
  • パイソン 3.7.5
  • パス内のGoogle Chromeバージョン80および対応するChromeDriver C:\Windows
  • セレン 3.141.0

私は、引数を追加するのに必要--no-sandbox--remote-debugging-port=9222するChromeOptions対象物、管理者としてのPowershell / CMDをlunchingことにより、管理者ユーザーとしてコードを実行します。

関連するコードは次のとおりです。

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(options=options)

1
ubuntu 18.04、py3.7、chrome(driver)80を備えたdockerを使用した私にとっても同じです
patroqueeet

これで問題なく動作しました。今日この問題に遭遇し始めたばかりですが、あなたの答えのため、すぐに修正されます!私の環境は基本的にあなたのものと同じです。
ライアンハリス

5

最初にChromedriverを個別にダウンロードしてから使用した後、Ubuntu 20でPython Seleniumを使用してこの問題に遭遇しましたsudo apt install chromium-browserが、同じバージョンであったにもかかわらず、この問題が発生し続けました。

私の修正は、次の場所にあるレポパッケージに付属している付属のChromeドライバーを使用することでした。

/snap/bin/chromium.chromedriver

driver = webdriver.Chrome(chrome_options=options, executable_path='/snap/bin/chromium.chromedriver')

4

この他の答えで述べたように:

このエラーメッセージは、ChromeDriverが新しいWebBrowser、つまりChrome Browserセッションを開始または起動できなかったことを意味します。

考えられる原因の中で、私はあなたがXvfbのを経由してヘッドレスクロムを実行している場合には、あなたは、という事実に言及したいかもしれませんに必要な変数を:私の場合、私は(推奨されているように)所定の位置に持っていたし、オプション、すべてがでした正常に動作していますが、最新の(執筆時点で)Ubuntu 18.04を実行している新しいインストールでは、このエラーが発生し始めました。可能な修正は、(以前にXvfbをで起動していた)を実行することでした。exportDISPLAY--disable-dev-shm-usage--no-sandboxexport DISPLAY=":20"Xvfb :20&


OMGありがとうございます。Dockerコンテナーにいくつかの変更を加えていたところ、誤ってxvfbを省略しました。これをここに置いていなかったら、私はこれを見つけなかっただろう:-)。
ライアン

3

私はjenkinsサーバーとの統合中にもこの問題に直面しました。jenkinジョブにrootユーザーを使用しましたユーザーを他のユーザーに変更すると、この問題は修正されました。このエラーがrootユーザーに対して発生する理由がわかりません。

  • Google Chromeバージョン71.0
  • ChromeDriverバージョン2.45
  • CentOS7バージョン1.153

非rootユーザーが私のために働いた、私はクロムの正しいクロムドライバーバージョンを持っていた。
TicJit

2

私の場合、デフォルトのユーザープロファイルを使用しようとしたときに発生しました。

...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...

これにより、Chromeはトリガーされ、既にバックグラウンドで実行されているプロセスを再利用しました。

解決策:バックグラウンドで実行されているすべてのchrome.exeプロセスを終了します。


私にも同様の問題がありましたが、Linuxでは、スクリプトがクラッシュした後、Chromeプロセスが適切に終了せず、誤って再利用されていました。彼らを殺すことで問題は解決しました
jeremycg 2018

2

conf.jsの機能を更新

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['todo-spec.js'],
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ['--disable-gpu', '--no-sandbox', '--disable-extensions', '--disable-dev-shm-usage']
    }
  },

};

2

私の場合、Windows OSでクロムブラウザーを使用して実行可能なjarを作成しようとしていて、CentOを搭載したUNIXボックスでヘッドレスモードで同じように実行したいと考えていました。そして、私は自分のバイナリを、自分のスイートにダウンロードしてパッケージ化したドライバーを指していました。私にとって、この問題は以下の追加に関係なく発生し続けます:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");
options.setBinary("/pointing/downloaded/driver/path/in/automationsuite");
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
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("window-size=1024,768"); // Bypass OS security model
options.addArguments("--log-level=3"); // set log level
options.addArguments("--silent");//
options.setCapability("chrome.verbose", false); //disable logging
driver = new ChromeDriver(options);

私が試して働いた解決策は、クロムとそのツールをホストVM / Unixボックスにダウンロードし、バイナリをインストールして、オートメーションスイートとビンゴでこれを指すようにすることです!できます :)

ダウンロードコマンド:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

インストールコマンド:

sudo yum install -y ./google-chrome-stable_current_*.rpm

以下のgoogle-chromeのバイナリパスでスイートを更新します。

options.setBinary("/opt/google/chrome/google-chrome");

そして、それはうまくいきます!


このコードはどこに追加しますか?私の.sideファイルにC#コードがありません
pabrams

1

同じ問題がありましたが、私の場合、以前はクロムがユーザーの一時フォルダーにインストールされていましたが、その後プログラムファイルに再インストールされました。したがって、ここで提供された解決策はどれも私を助けませんでした。ただし、chrome.exeへのパスを指定すると、すべて機能します。

chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

これが誰かを助けることを願っています=)


以下の@shiuu修正の正反対のようです
Toby

1

私にとって解決策はありませんでした。しかし、これは回避策です:

maxcounter=5
for counter in range(maxcounter):
    try:           
        driver = webdriver.Chrome(chrome_options=options,
                          service_log_path=logfile,
                          service_args=["--verbose", "--log-path=%s" % logfile])
        break
    except WebDriverException as e:
        print("RETRYING INITIALIZATION OF WEBDRIVER! Error: %s" % str(e))
        time.sleep(10)
        if counter==maxcounter-1:
            raise WebDriverException("Maximum number of selenium-firefox-webdriver-retries exceeded.")

1

このエラーは、Chromeに不正な引数を渡した場合にのみ発生します。たとえば"headless"、C#ChromeDriverに引数として渡すと、うまく起動します。間違えて間違った構文を使用すると"--headless"DevToolsActivePort file doesn't existエラーが発生します。


1

同じ問題が発生しました。UBUNTU、PYTHON、OPERAブラウザを使用していますます。私の場合、古いバージョンのoperadriverがあったために問題が発生しました。

解決策:1.必ず最新のオペラブラウザバージョンをインストールしてください(オペラベータまたはオペラ開発者は使用しないでください)。そのためには、公式のオペラサイトにアクセスし、そこから最新のopera_stableバージョンをダウンロードしてください。

  1. 最新のoperaドライバーをインストールします(operaドライバーが既にインストールされている場合は、最初に削除してsudo rmを使用する必要があります...)

wget https://github.com/operasoftware/operachromiumdriver/releases/download/v.80.0.3987.100/operadriver_linux64.zip

   unzip operadriver_linux64.zip
   sudo mv operadriver /usr/bin/operadriver
   sudo chown root:root /usr/bin/operadriver
   sudo chmod +x /usr/bin/operadriver

私の場合、最新の値は80.0.3987でした。

  1. さらに、chromedriverもインストールしました(ただし、テストの前にインストールしたため、これが必要かどうかはわかりません)chromedriverをインストールするには、前の手順の手順に従います。

  2. 楽しんでくれてありがとう!

セレンコードのサンプル

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Opera()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.quit()

0

このエラーには多くの原因が考えられます。この例では、コードに次の2行が含まれていたためにエラーが発生しました。

System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);

2行目を削除することで解決します。


上記の@ sergiy-konoplyaniyの修正とは正反対のようです: '(
Toby

私たちのsetBinaryでは、Chromeドライバーを設定しようとしましたが、これは間違いのようです。@ sergiy-konoplyaniyの修正により、chrome.exeがsetBinaryを介して設定されます。
shiuu

このコードはどこにありましたか?私が持っているのは.sideファイルだけで、C#コードは含まれていません。
パブラム

0

DockerコンテナでBehat / MinkとSeleniumを介してChromeを実行しているときに同じ問題が発生しました。少しいじった後、私はbehat.yml上記のスイッチを提供する次のものに到着しました。これらをすべて正常に実行するために必要なことに注意してください。

default:
    extensions:
        Behat\MinkExtension:
            base_url: https://my.app/
            default_session: selenium2
            selenium2:
                browser: chrome
                capabilities:
                    extra_capabilities:
                        chromeOptions:
                            args:
                                - "headless"
                                - "no-sandbox"
                                - "disable-dev-shm-usage"

0

私の場合、私はデフォルトのTMPDIRを使用できないKubernetes環境にいます。一時ディレクトリがゴミでいっぱいになるためです。

だから私はこれを使って別のtmpdirを使っていました:

driver = new ChromeDriver(new ChromeDriverService.Builder()
                    .withEnvironment(ImmutableMap.of("TMPDIR", customTmpPath))
                    .build(), options);

しかし、私はすべてを最新のものにアップグレードしたので、これはもはや機能していないようです。これを行う新しい方法を見つける必要があります。


0

これは、chromedriverがchromeが使用しているデバッグポートを把握できない場合に発生します。

考えられる原因の1つは、 HKEY_CURRENT_USER \ Software \ Policies \ Google \ Chrome \ UserDataDirの

しかし、私の最後のケースでは、それは他の未確認の原因でした。

幸いなことに、手動でポート番号を設定するとうまくいきました:

final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);

2
それは定数ポートですか?またはどこで探すことができますか?
Mike Shiyan

0

私の場合、ポート番号が間違っています。Seleniumサーバーの起動時のポート番号がスクリプト内のものと同じかどうかを確認します。


-2

インストールすることでこの問題を解決します yum -y install gtk3-devel gtk3-devel-docsには、[OK]を動作します」

私の仕事の環境は:

Selenium Version 3.12.0
ChromeDriver Version v2.40
Chrome 68 level

前:
ここに画像の説明を入力してください ここに画像の説明を入力してください

後:
ここに画像の説明を入力してください ここに画像の説明を入力してください


9
口コミから:画像にテキストを投稿しないでください。回答を編集して、それらの画像をテキストに置き換えます。おかげで
sɐunıɔןɐqɐp

1
これは誰にとっても問題を解決しますか?これは私にとって問題を解決しませんでした
ベンドラム2018

-2

これはこのタイプのエラーの最もアクティブなメッセージであるため、(これを修正するために何時間も費やした後で)私の解決策について言及したいと思います。

Ubuntu 18.04では、Chrome 70、Chromedriver 2.44、およびPython3を使用して、上記のオプションをすべて無効にしても、同じDevToolsActivePortエラーが発生し続けました。chromedriverログファイルとpsは、chrome_options.binary_locationで設定したchromedriverが実行中であることを示していましたが、常にDevToolsActivePortエラーが発生していました。chrome_options.binary_location = '....'を削除してwebdriverの作成に追加すると、問題なく動作します。webdriver.Chrome( '/ path to ... / chromedriver'、chrome_options = chrome_options)

問題を理解して解決するためのコメントをありがとうございました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.