私は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)
私の設定:
Chrome:66 ChromeBrowser:2.39.56
P.SすべてFirefoxでうまく動作します
更新:
私は問題を乗り越えることができますそして今私は望ましいURLでクロムにアクセスすることができます。
提供された解決策を試した結果:
上記のすべての設定を試しましたが、問題を解決できませんでした
問題に関する説明:
私の観察によれば、DevToolsActivePortファイルが存在しないのは、クロムがscoped_dirXXXXXフォルダーでその参照を見つけることができないときに起こります。
問題を解決するためにとられた手順
クロムを呼び出すために以下のコードを追加しました
System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get(url);
上記の手順を使用して、私は問題を解決することができました。
あなたの答えてくれてありがとう。
このエラーメッセージ.
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");
base_switches.ccdisable-dev-shm-usage
はLinuxでのみ有効なようです:
#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を使うオプションを追加 Davidは次のように述べています。
/ dev/shmと/ tmpのマウント方法によって異なると思います。それらが両方ともtmpfsとしてマウントされている場合、私は何の違いもないと思います。何らかの理由で/ tmpがtmpfsとしてマッピングされていない場合(およびsystemdではデフォルトでtmpfsとしてマッピングされていると思います)、匿名の共有ファイルを作成するときにクロム共有メモリ管理は常にファイルをメモリにマッピングします多くの違いがあります。フラグを有効にしてテレメトリテストを強制し、それがどのように行われるかを確認できると思います。
なぜデフォルトで使わないのかということに関しては、それは共有メモリチームによって押し戻された、私はそれがデフォルトで共有メモリのために/ dev/shmを使うべきであることは理にかなっていると思います。
最終的には、これらすべてがmemfd_createを使用するように移行するはずですが、Chromeのメモリ管理を大幅にリファクタリングする必要があるため、すぐには実現するとは思いません。
私は2018年6月6日月曜日にこの問題を見始めました。私たちのテストは毎週実行されます。変更された唯一のことは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");
私たちは私たちのジェンキンス奴隷(Linuxマシン)で同じ問題を抱えていて、上記のすべてのオプションを試してみました。
唯一の助けは引数を設定することです
chrome_options.add_argument('--headless')
しかし、さらに調査したところ、XVFB画面がプロパティを起動していないこと、およびこのエラーの原因となっていることに気付きました。 XVFBの画面を修正した後、それは問題を解決しました。
私は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)
私は最近同じ問題に直面していました、そして試行錯誤の後にそれは私のためにも同様に働きました。
上になければなりません:
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>
私の場合は、デフォルトのユーザープロファイルを使用しようとしたときに発生しました。
...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...
これは、chromedriver.exeによって開始されたプロセスが単に終了されたというそのような方法で、既にバックグラウンドで実行されているプロセスを再利用するためにchromeを引き起こしました。
解決策:バックグラウンドで実行されているすべてのchrome.exeプロセスを終了します。
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']
}
},
};
この他の回答 で述べたように:
このエラーメッセージ...は、ChromeDriverが新しいWebBrowser、つまりChromeブラウザセッションを開始または生成できなかったことを意味します。
考えられる原因の中で、Xvfbを使用してヘッドレスChromiumを実行している場合、mightexport
DISPLAY
変数:私の場合、--disable-dev-shm-usage
および--no-sandbox
オプションを(推奨どおりに)配置しましたが、すべてが正常に実行されていましたが、新しいインストールでは最新の(執筆時点で)Ubuntu 18.04このエラーは発生し始め、唯一の可能な修正はexport DISPLAY=":20"
(以前にXvfb :20&
でXvfbを開始した)を実行することでした。
このエラーには多くの原因が考えられます。私たちの場合、エラーが発生したのは、コードに次の2行があるためです。
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);
2行目を削除することで解決しました。
私はまたjenkinサーバと統合している間この問題に直面しました、私はjenkinの仕事のために root ユーザを使用しました ユーザを他のユーザに変更したとき問題は修正されました rootユーザーに対してこのエラーが発生する理由はわかりません。
Google Chromeバージョン71.0
ChromeDriverバージョン2.45
CentOS7バージョン1.153
解決策は私のために働きませんでした。しかし、これが回避策です。
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.")
私の場合は、Chromeブラウザ搭載の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);
私が試してみた解決策は、クロムとそのツールを[Host 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");
そして、それはうまくいきます!
私の場合、Kubernetes環境にいるため、デフォルトのTMPDIRを使用できません。一時ディレクトリがゴミでいっぱいになるためです。
だから私はこれを使用して別のtmpdirを使用していました:
driver = new ChromeDriver(new ChromeDriverService.Builder()
.withEnvironment(ImmutableMap.of("TMPDIR", customTmpPath))
.build(), options);
しかし、私はすべてを最新のものにアップグレードしたので、これはもはや機能していないようです。これを行う新しい方法を見つける必要があります。
私は同じ問題を抱えていたが、私の場合はchromeが以前はユーザーのtempフォルダにインストールされていましたが、その後Programファイルに再インストールされました。だからここに提供された解決策のどれも私を助けていませんでした。しかし、chrome.exeへのパスを指定すると、すべてうまくいきます。
chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
私はこれが誰かに役立つことを願っています=)
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"