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.

Шаги, предпринятые для решения проблемы

  1. Я убил все хромовые процессы и процессы хром-драйвера.
  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);
    

Используя приведенные выше шаги, я смог решить проблему.

Спасибо за ваши ответы.

Ответ 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 hereenter image description here

После:
enter image description hereenter 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)

Спасибо всем за ваши комментарии, которые заставляют меня понимать и решать проблему.