org.openqa.selenium.WebDriverException: неизвестная ошибка: файл DevToolsActivePort не существует при попытке запуска браузера Chrome
Я пытаюсь запустить 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
50 ответов
Обновить:
Я могу решить эту проблему, и теперь я могу получить доступ к Chrome с желаемым URL.
Результаты опробования предоставленных решений:
Я попробовал все настройки, как указано выше, но мне не удалось решить проблему
Объяснение по поводу проблемы:
Согласно моим наблюдениям, файл DevToolsActivePort не существует, это вызвано тем, что chrome не может найти свою ссылку в папке scoped_dirXXXXX.
Шаги, предпринятые для решения проблемы
- Я убил все процессы Chrome и процессы драйвера Chrome.
Добавлен код ниже, чтобы вызвать Chrome
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 не смог инициировать / порождать новый веб- браузер, то есть сеанс браузера Chrome.
Ваши испытания кода и информация о версиях всех двоичных файлов дала бы нам подсказку о том, что происходит не так.
Однако в соответствии с параметром Добавить --disable-dev-shm-Использование к флагам запуска по умолчанию добавляется аргумент. --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.
Я начал видеть эту проблему в понедельник 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-Использование" остановило ошибку. Я рассмотрю эти вопросы, чтобы найти дополнительную информацию об эффекте и другие вопросы, касающиеся того, что вызвало обновление Google-Chrome.
ChromeOptions options = new ChromeOptions();
...
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
У нас были те же проблемы с нашими рабами jenkins (машина linux) и мы испробовали все варианты, описанные выше.
Помогла только установка аргумента
chrome_options.add_argument('--headless')
Но когда мы продолжили исследование, заметили, что экран XVFB не запускает свойства, и это вызывает эту ошибку. После того, как мы исправили экран XVFB, он решил проблему.
У меня была такая же проблема в питоне. Вышеуказанное помогло. Вот что я использовал в 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)
В моем случае в следующей среде:
- Windows 10
- Python
3.7.5
- Google Chrome версии 80 и соответствующий ChromeDriver в пути
C:\Windows
- селен
3.141.0
Мне нужно было добавить аргументы --no-sandbox
а также --remote-debugging-port=9222
к ChromeOptions
объект и запустите код от имени администратора, запустив Powershell/cmd от имени администратора.
Вот связанный фрагмент кода:
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)
Недавно я столкнулся с той же проблемой, и после некоторых проб и ошибок это сработало и для меня.
ДОЛЖЕН БЫТЬ НА ВЕРХЕ:
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>
Я столкнулся с этой проблемой на 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')
В моем случае это была проблема с учетной записью CI Agent на сервере ubuntu, я решил это с помощью настраиваемого --user-data-dir
chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')
У моей учетной записи, используемой CI Agent, не было необходимых разрешений, что интересно, все работало с учетной записью root
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')
driver = webdriver.Chrome(options=chrome_options)
url = 'https://www.google.com'
driver.get(url)
get_url = driver.current_url
print(get_url)
Есть много возможных причин
RESPONSE InitSession ERROR unknown error: DevToolsActivePort file doesn't exist
сообщение об ошибке (это видно по количеству ответов на этот вопрос). Итак, давайте погрузимся глубже, чтобы объяснить, что именно означает это сообщение об ошибке.
Согласно исходному коду хромодрайвера сообщение создается в методе . Этот метод вызывается после .
В цикле драйвер проверяет, запущен ли процесс Chrome и
ParseDevToolsActivePortFile
файл уже был создан хромом. Для этого цикла ParseDevToolsActivePortFileжестко задан тайм-аут 60 секундзапуска процесса Chromeиз цикла .
Я вижу две возможные причины этого сообщения:
- Chrome действительно работает медленно во время запуска - например, из-за нехватки системных ресурсов - в основном процессора или памяти. В этом случае может случиться так, что иногда хром удается запустить в срок, а иногда нет.
- Есть еще одна проблема, которая препятствует запуску Chrome - отсутствие или нарушение зависимости, неправильная конфигурация и т. Д. В таком случае это сообщение об ошибке не очень полезно, и вы должны найти другое сообщение журнала, которое объясняет истинную причину сбоя.
Это происходит, когда chromedriver не может определить, какой порт отладки используется хромом.
Одна из возможных причин - открытый дефект с HKEY_CURRENT_USER\Software\Policies\Google\Chrome\UserDataDir
Но в моем последнем случае это была другая неустановленная причина.
К счастью, установка номера порта вручную сработала:
final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);
Я знаю, что это старый вопрос, и на него уже есть много ответов. Однако я столкнулся с этой проблемой, наткнулся на эту тему, и ни одно из предложенных решений не помогло. Потратив на это несколько дней (!) Я наконец нашел решение:
Моя проблема заключалась в том, что я использовалselenium/standalone-chrome
изображение на MacBook с чипом M1. После перехода наseleniarm/standalone-chromium
все наконец начало работать.
Я застрял на этом очень долго и, наконец, исправил это, добавив эту дополнительную опцию:
options.addArguments("--crash-dumps-dir=/tmp")
Как указано в этом другом ответе:
Это сообщение об ошибке... означает, что ChromeDriver не смог инициировать / создать новый WebBrowser, то есть сеанс браузера Chrome.
Среди возможных причин я хотел бы отметить тот факт, что, если вы используете Chrome без головного устройства через Xvfb, вам может понадобиться export
DISPLAY
переменная: в моем случае я имел (как рекомендовано) --disable-dev-shm-usage
а также --no-sandbox
опций, все работало нормально, но в новой установке, работающей на последней (на момент написания) версии Ubuntu 18.04, эта ошибка начала возникать, и единственно возможным решением было выполнение export DISPLAY=":20"
(ранее запустив Xvfb с Xvfb :20&
).
Вы можете получить эту ошибку, просто передав неверные аргументы в Chrome. Например, если я прохожу"headless"
в качестве аргумента для C# ChromeDriver он отлично запускается. Если я сделаю ошибку и использую неправильный синтаксис,"--headless"
, Я получаю DevToolsActivePort file doesn't exist
ошибка.
Старый вопрос, но похожая проблема почти довела меня до безумия, поэтому поделился своим решением. Ни одно из других предложений не устранило мою проблему.
Когда я обновил установку Chrome образа Docker со старой версии до Chrome 86, я получил эту ошибку. Моя установка не была идентична, но мы создавали экземпляр Chrome через веб-драйвер Selenium.
Решением было передать параметры как
goog:chromeOptions
хеш вместо
chromeOptions
хэш. Я действительно не знаю, было ли это Selenium, Chrome, Chromedriver или какое-то другое обновление, но, возможно, какая-то бедная душа найдет утешение в этом ответе в будущем.
Дата 16.09.2021
Все работает нормально, запуск хром с селеном локально с питоном внутри контейнера ubuntu, размещенного в докере. При попытке запустить из Jenkins возвращается указанная выше ошибка
WebDriverException: unknown error: DevToolsActivePort
Среда:
-Ubuntu21.04 внутри контейнера докеров с доступом RDP.
-хромированная отвертка для хромированной версии: 93
Решение: внутри файла python, запускающего браузер, мне пришлось установить
DISPLAY
переменную среды, используя следующие строки:
import os
os.environ['DISPLAY'] = ':10.0'
#DISPLAY_VAR = os.environ.get('DISPLAY')
#print("DISPLAY_VAR:", DISPLAY_VAR)
Это обсуждается в выпуске ChromeDriver № 4403. Более поздние комментарии 32 и 35 содержат ценную информацию от члена команды Chromium.
https://bugs.chromium.org/p/chromedriver/issues/detail?id=4403#c32/ _
Статус: Запущено (было: Исправлено)
Мы еще не решили проблему с debuggerAddress в режиме каналов (см. chromedriver:4533).Selenium не может начать новый сеанс без этой информации, поскольку весь BiDirectional API (на основе CDP) опирается на эту информацию (см. https://www.selenium.dev/documentation/webdriver/bidirection/bidi_api/). На данный момент нам придется восстановить «порт удаленной отладки» в качестве режима по умолчанию.
https://bugs.chromium.org/p/chromedriver/issues/detail?id=4403#c35
Попробуйте chrome_options.add_argument('--remote-debugging-pipe') В этом режиме DevToolsActivePort не используется. Вам понадобится ChromeDriver-117 или новее.
Для Ubuntu 20 это помогло мне использовать мой системный драйвер хрома вместо загруженного:
# chromium which
/snap/bin/chromium
driver = webdriver.Chrome('/snap/bin/chromium.chromedriver',
options=chrome_options)
И для загруженного веб-драйвера похоже, что ему нужно установить порт удаленной отладки --remote-debugging-port =9222 , как в одном из ответов (от Soheil Pourbafrani):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome('<path_to>/chromedriver', options=chrome_options)
У меня была та же проблема, но в моем случае Chrome ранее был установлен в пользовательскую временную папку, после чего был переустановлен в Program files. Таким образом, любое из представленных здесь решений не помогло мне. Но если указать путь к chrome.exe, все работает:
chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\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']
}
},
};
Я также столкнулся с этой проблемой при интеграции с сервером jenkins, для работы с jenkin меня использовал пользователь root, проблема была исправлена, когда я сменил пользователя на другого. Я не уверен, почему эта ошибка возникает для пользователя root.
Google Chrome Версия 71.0
ChromeDriver версия 2.45
CentOS7 версия 1.153
В моем случае это произошло, когда я попытался использовать свой профиль пользователя по умолчанию:
...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...
Этот запущенный Chrome для повторного использования процессов, уже запущенных в фоновом режиме, таким образом, что процесс, запущенный chromedriver.exe, был просто завершен.
Решение: убейте все процессы chrome.exe, работающие в фоновом режиме.
Была такая же проблема. Я запускаю сценарий селена на облачной виртуальной машине Google.
options.addArguments("--headless");
Вышеупомянутая строка решила мою проблему. Я удалил другие необязательные аргументы. Я думаю, что остальные строки кода, упомянутые в других ответах, не повлияли на решение проблемы в облачной виртуальной машине.
Я столкнулся с этой проблемой при запуске нескольких экземпляров Chromium на одном компьютере. Вам необходимо создать отдельный временный каталог для каждого экземпляра Chromium .
addArguments(`user-data-dir=${CURRENT_CHROMIUM_TMP_DIR}`);
Я запускаю тесты на селен с Jenkins, работающим на Linux Ubuntu 18 LTS. У меня была эта ошибка, пока я не добавил такой аргумент 'headless' (и некоторые другие аргументы):
ChromeOptions options = new ChromeOptions();
options.addArguments("headless"); // headless -> no browser window. needed for jenkins
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
ChromeDriver driver = new ChromeDriver(options);
driver.get("www.google.com");
В моем случае я пытался создать исполняемый файл jar в ОС Windows с браузером Chrome и хочу запустить его в автономном режиме в Unix-системе с CentO на нем. И я указывал свой двоичный файл на драйвер, который я скачал и упаковал с моим набором. Для меня эта проблема продолжает возникать независимо от добавления ниже:
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");
И.. это работает!
в моем случае, когда я изменил
google-chrome
и
chromedriver
версия, ошибка исправлена :)
#google-chrome version
[root@localhost ~]# /usr/bin/google-chrome --version
Google Chrome 83.0.4103.106
#chromedriver version
[root@localhost ~]# /usr/local/bin/chromedriver -v
ChromeDriver 83.0.4103.14 (be04594a2b8411758b860104bc0a1033417178be-refs/branch-heads/4103@{#119})
ps: версия селена была 3.9.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.")
Я столкнулся с той же проблемой, в моем случае в системе Linux есть два разных обычных пользователя userA и userB . userA сначала запустите программу selinium, которая успешно запускает браузер Chrome с ChromeDriver, когда дело доходит до пользователя B,DevToolsActivePort file doesn't exist
возникает ошибка.
я попробовал--remote-debugging-port=9222
вариант, но это приводит к новому исключению:selenium.common.exceptions.WebDriverException: Message: chrome not reachable
Я запустил каталог google-chome и увидел следующую ошибку:
mkdir /tmp/Crashpad/new: Permission denied (13)
Я ищу проблему и получил это:
https://johcylee.github.io/2022/05/14/chrome-headless-%E6%A8%A1%E5%BC%8F%E4%B8%8B-devtoolsactiveport- файл-не-существует-%E5%95%8F%E9%A1%8C/
chrome_options.add_argument(f"--crash-dumps-dir={os.path.expanduser('~/tmp/Crashpad')}")
Спасибо @johncylee.