WebDriverException: неизвестная ошибка: файл DevToolsActivePort не существует при попытке запуска браузера Chrome
Я пытаюсь запустить хром с URL-адресом, браузер запускается и после этого ничего не делает.
Я вижу следующую ошибку после 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
PS все отлично работает в Firefox
Ответы
Ответ 1
Обновить:
Я могу решить проблему, и теперь я могу получить доступ к хром с желаемым URL.
Результаты тестирования предоставленных решений:
Я попробовал все настройки, как указано выше, но я не смог решить проблему
Объяснение проблемы:
Согласно моему наблюдению, файл DevToolsActivePort не существует, потому что chrome не может найти его ссылку в папке 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);
Используя приведенные выше шаги, я смог решить проблему.
Спасибо за ваши ответы.
Ответ 2
Это сообщение об ошибке...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file does not exist
... подразумевает, что ChromeDriver не смог инициировать/создать новый веб-браузер, т.е. сеанс браузера Chrome.
Ваши испытания кода и информация о версиях всех двоичных файлов дала бы нам подсказку о том, что происходит не так.
Однако в соответствии с добавлением --disable-dev-shm-using к флагам запуска по умолчанию кажется, что добавление аргумента --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-ое-использование
Согласно base_switches.cc disable-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
В обсуждении Добавьте опцию использования /tmp вместо /dev/shm Дэвид упоминает:
Я думаю, что это будет зависеть от того, как смонтированы /dev/shm и /tmp. Если они оба смонтированы как tmpfs, я предполагаю, что не будет никакой разницы. если по какой-то причине /tmp не отображается как tmpfs (и я думаю, что по умолчанию systemd отображает как tmpfs), управление общей памятью chrome всегда отображает файлы в память при создании анонимных общих файлов, поэтому даже в этом случае не должно быть большая разница Я полагаю, вы могли бы принудительно провести тесты телеметрии с включенным флагом и посмотреть, как он работает.
Что касается того, почему не использовать по умолчанию, команда общей памяти отодвинула его назад, я думаю, что имеет смысл использовать /dev/shm для общей памяти по умолчанию.
В конечном итоге все это должно перейти на использование memfd_create, но я не думаю, что это произойдет в ближайшее время, поскольку это потребует значительного рефакторинга управления памятью Chrome.
Outro
Вот ссылка на историю Песочницы.
Ответ 3
Я начал эту проблему в понедельник 2018-06-04. Наши тесты проводятся каждый будний день. Похоже, что единственное, что изменилось, это версия google-chrome (которая была обновлена до текущей). JVM и Selenium были последними версиями на Linux-боксе (Java 1.8.0_151, selenium 3.12.0, google-chrome 67.0.3396.62 и Xvfb перспектива).
В частности, добавление аргументов " --no-sandbox " и " --disable-dev-shm-usage " остановило ошибку. Я рассмотрю эти проблемы, чтобы найти дополнительную информацию об эффекте и другие вопросы, как в том, что вызвало обновление google-chrome.
ChromeOptions options = new ChromeOptions();
...
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
Ответ 4
У нас были одни и те же проблемы с нашими рабами jenkins (linux machine) и пробовали все варианты выше.
Единственное, что помогло - установить аргумент
chrome_options.add_argument('--headless')
Но когда мы исследовали дальше, заметили, что экран XVFB не запускает свойство и вызывает эту ошибку. После того, как мы установили экран XVFB, он решил проблему.
Ответ 5
У меня была такая же проблема в 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)
Ответ 6
Недавно я столкнулся с той же проблемой, и после некоторых проб и ошибок это сработало и для меня.
ДОЛЖЕН БЫТЬ НА ВЕРХЕ:
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>
Ответ 7
В моем случае это произошло, когда я попытался использовать свой профиль пользователя по умолчанию:
...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...
Это вызвало хром для повторного использования процессов, уже работающих в фоновом режиме, таким образом, процесс, начатый chromedriver.exe, был просто закончен.
Разрешение: убейте все процессы chrome.exe, работающие в фоновом режиме.
Ответ 8
В моем случае я пытался создать исполняемый файл jar в ОС Windows с браузером Chrome и хочу запустить его в автономном режиме в Unix-боксе с CentOs на нем. И я указывал свой двоичный файл на драйвер, который я скачал и упаковал с моим набором. Для меня эта проблема продолжает возникать независимо от добавления ниже:
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);
Решение, которое я пробовал и работало для меня, это загрузить Chrome и его инструменты на хост-машину 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");
И.. это работает!
Ответ 9
обновить возможности в 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']
}
},
};
Ответ 10
Как указано в этом другом ответе:
Это сообщение об ошибке... означает, что ChromeDriver не смог инициировать/порождать новый сеанс WebBrowser, т.е. браузер Chrome.
Среди возможных причин я хотел бы упомянуть тот факт, что, если вы используете Chrome без головного устройства через Xvfb, вам может потребоваться export
переменная DISPLAY
: в моем случае я имел место (как рекомендовано) параметры --disable-dev-shm-usage
и --no-sandbox
, все работало нормально, но в новой установке, работающей на последней (на момент написания) версии Ubuntu 18.04, эта ошибка начала возникать, и единственным возможным исправлением было выполнение export DISPLAY=":20"
(ранее запустив Xvfb с Xvfb :20&
).
Ответ 11
У меня была такая же проблема, но в моем случае хром ранее был установлен в папку временных файлов пользователя, после чего был переустановлен в файлы программы. Поэтому любое решение, предлагаемое здесь, не помогло мне. Но если обеспечить путь к chrome.exe, все работает:
chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
Надеюсь, это поможет кому-то =)
Ответ 12
Никакое решение не помогло мне. Но вот обходной путь:
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.")
Ответ 13
Кажется, есть много возможных причин этой ошибки. В нашем случае ошибка произошла из-за того, что в коде были следующие две строки:
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);
Он решил удалить вторую строку.
Ответ 14
Я также столкнулся с этой проблемой при интеграции с сервером Jenkins, я использовал суперпользователь для Дженкиной работы, то проблема была решен, когда я изменил пользователь другого пользователя. Я не уверен, почему эта ошибка возникает для пользователя root.
Google Chrome Версия 71.0
ChromeDriver версия 2.45
CentOS7 версия 1.153
Ответ 15
Я столкнулся с той же проблемой при запуске Chrome через Behat/Mink и Selenium в контейнере Docker. После некоторых недоразумений я пришел к следующему 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"
Ответ 16
В моем случае я нахожусь в среде Kubernetes, где я не могу использовать TMPDIR по умолчанию, потому что он заполнит временный каталог мусором.
Так что я использовал это, чтобы использовать другой tmpdir:
driver = new ChromeDriver(new ChromeDriverService.Builder()
.withEnvironment(ImmutableMap.of("TMPDIR", customTmpPath))
.build(), options);
Но теперь, когда я обновил все до последней версии, это больше не работает. Мне нужно будет найти новый способ сделать это.
Ответ 17
Я yum -y install gtk3-devel gtk3-devel-docs
эту проблему, установив yum -y install gtk3-devel gtk3-devel-docs
", он работает нормально
Моя работа env:
Selenium Version 3.12.0
ChromeDriver Version v2.40
Chrome 68 level
До:
![enter image description here]()
![enter image description here]()
После:
![enter image description here]()
![enter image description here]()
Ответ 18
Поскольку это наиболее активное сообщение для этого типа ошибок, я хотел бы упомянуть о моем решении (после того, как потратили часы, чтобы исправить это).
На Ubuntu 18.04, используя Chrome 70 и Chromedriver 2.44 и Python3, я продолжал получать ту же ошибку DevToolsActivePort, даже когда я отключил все параметры, перечисленные выше. Файл журнала хромированных рекордов, а также ps показал, что установлен хромограф, установленный в chrome_options.binary_location, но он всегда вызывал ошибку DevToolsActivePort. Когда я удаляю chrome_options.binary_location = '....' и добавляю его к созданию webdriver, я получаю его работоспособным. webdriver.Chrome('/путь к... /chromedriver', chrome_options = chrome_options)
Спасибо всем за ваши комментарии, которые заставляют меня понимать и решать проблему.