web-dev-qa-db-fra.com

org.openqa.Selenium.WebDriverException: erreur inconnue: le fichier DevToolsActivePort n'existe pas lors de la tentative de lancement du navigateur Chrome.

J'essaie de lancer chrome avec une URL, le navigateur démarre et il ne fait rien par la suite.

Je vois l'erreur ci-dessous après 1 minute: 

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)

Ma configuration:

Chrome: 66 ChromeBrowser: 2.39.56

P.S tout fonctionne bien dans Firefox

51
Kumar Sampath

Mettre à jour:

Je suis capable de passer à travers le problème et maintenant je peux accéder au chrome avec l'URL souhaitée.

Résultats d'essayer les solutions fournies:

J'ai essayé tous les paramètres décrits ci-dessus, mais je n'ai pas pu résoudre le problème.

Explication concernant le problème:

D'après mon observation, le fichier DevToolsActivePort inexistant est causé par l'impossibilité pour chrome de trouver sa référence dans le dossier scoped_dirXXXXX.

Mesures prises pour résoudre le problème  

  1. J'ai tué tous les processus de chrome et les processus de pilote de chrome.
  2. Ajout du code ci-dessous pour invoquer le 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);
    

En utilisant les étapes ci-dessus, j'ai pu résoudre le problème.

Merci pour vos réponses.

6
Kumar Sampath

Ce message d'erreur ...

org.openqa.Selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist 

... implique que ChromeDriver n'a pas pu lancer/générer une nouvelle session WebBrowser, c'est-à-dire Navigateur Chrome.

Vos essais de code et les informations de version de tous les fichiers binaires nous auraient donné une idée de ce qui ne va pas. 

Cependant, comme indiqué dans Ajouter --disable-dev-shm-usage aux indicateurs de lancement par défaut semble ajouter l’argument --disable-dev-shm-usage résoudra temporairement le problème.

Si vous souhaitez lancer/étendre une nouvelle session Navigateur Chrome, vous pouvez utiliser la solution suivante:

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

Selon base_switches.ccdisable-dev-shm-usage semble être valide uniquement sur 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

Dans la discussion Ajoutez une option pour utiliser/tmp au lieu de/dev/shm David mentionne:

Je pense que cela dépend de la manière dont/dev/shm et/tmp sont montés. S'ils sont tous deux montés en tant que tmpfs, je suppose qu'il n'y aura aucune différence. Si, pour une raison quelconque,/tmp n'est pas mappé en tant que tmpfs (et je pense qu'il est mappé en tant que tmpfs par défaut par systemd), la gestion de la mémoire partagée de chrome mappe toujours les fichiers en mémoire lors de la création de fichiers partagés anonymes. beaucoup de différence. Je suppose que vous pourriez forcer les tests de télémétrie avec le drapeau activé et voir comment ça se passe.

En ce qui concerne pourquoi ne pas utiliser par défaut, l’équipe de la mémoire partagée l’a repoussé; j’imagine donc qu’il est logique d’utiliser par défaut/dev/shm.

En fin de compte, tout cela devrait évoluer vers memfd_create, mais je ne pense pas que cela se produira de si tôt, car cela nécessitera de refactoriser de manière significative la gestion de la mémoire Chrome. 

24
DebanjanB

J'ai commencé à voir ce problème le lundi 2018-06-04. Nos tests sont effectués chaque jour de la semaine. Il semble que la seule chose qui ait changé était la version google-chrome (qui avait été mise à jour) JVM et Selenium étaient des versions récentes sur Linux (Java 1.8.0_151, Selenium 3.12.0, google-chrome 67.0.3396.62 et xvfb-run).
Ajouter spécifiquement les arguments " --no-sandbox " et " --disable-dev-shm-usage " a arrêté l'erreur. Je vais examiner ces questions pour trouver plus d’informations sur l’effet, ainsi que d’autres questions relatives à la cause de la mise à jour de Google-Chrome.

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

Nous avions les mêmes problèmes sur nos esclaves Jenkins (machine Linux) et avons essayé toutes les options ci-dessus. 

La seule chose aidée est de mettre l'argument

chrome_options.add_argument('--headless')

Mais lorsque nous avons approfondi notre recherche, nous avons constaté que l’écran XVFB ne démarrait pas et qu’il causait cette erreur. Une fois que nous avons corrigé l'écran XVFB, le problème a été résolu.

10
Sreejith Edayillam

J'ai eu le même problème en python. Ce qui précède a aidé. Voici ce que j'ai utilisé en 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)
9
Vinodh Periyasamy

Je faisais face au même problème récemment et après quelques essais et erreurs, cela a également fonctionné pour moi.

DOIT ÊTRE SUR LE TOP:  

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>
3
user2325154

Dans mon cas, cela est arrivé quand j'ai essayé d'utiliser mon profil d'utilisateur par défaut:

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

Cela a déclenché la réutilisation de processus déjà exécutés en arrière-plan par chrome, de telle sorte que le processus lancé par chromedriver.exe était simplement terminé.

Résolution: supprimez tous les processus chrome.exe exécutés en arrière-plan.

2
radzimir

met à jour les capacités dans conf.js en tant que

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']
    }
  },

};
1
user2694064

Comme indiqué dans cette autre réponse :

Ce message d'erreur ... implique que ChromeDriver n'a pas pu initier/générer une nouvelle session WebBrowser, c'est-à-dire Chrome session de navigateur.

Parmi les causes possibles, je voudrais mentionner le fait que, dans le cas où vous exécutez un chrome sans tête via Xvfb, vous pourriez avoir besoin de export la variable DISPLAY: dans mon cas, j’avais en place (comme recommandé) les options --disable-dev-shm-usage et --no-sandbox, tout fonctionnait correctement, mais dans une nouvelle installation utilisant la dernière ( au moment de la rédaction) Ubuntu 18.04, cette erreur a commencé à se produire et le seul correctif possible était d’exécuter un export DISPLAY=":20" (après avoir déjà démarré Xvfb avec Xvfb :20&).

1
Piercarlo Slavazza

Il semble qu'il existe plusieurs causes possibles à cette erreur. Dans notre cas, l'erreur s'est produite car nous avions les deux lignes suivantes dans le code:

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

C'est résolu en supprimant la deuxième ligne.

0
shiuu

J'ai également rencontré ce problème lors de l'intégration au serveur jenkins. J'utilisais l'utilisateur root pour le travail jenkin, le le problème a été résolu lorsque j'ai remplacé l'utilisateur par un autre utilisateur. Je ne sais pas pourquoi cette erreur se produit pour l'utilisateur root.

Google Chrome version 71.0

ChromeDriver Version 2.45

CentOS7 version 1.153

0
Osanda Deshan

Aucune solution n'a fonctionné pour moi. Mais voici une solution de contournement:

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.")
0
Alex

Dans mon cas, j’essayais de créer un fichier jar exécutable sur un système d’exploitation Windows avec un navigateur Chrome et je souhaitais l’exécuter de la même manière en mode sans tête sous Unix avec CentOs. Et je pointais mon fichier binaire vers un pilote que j'ai téléchargé et fourni avec ma suite. Pour moi, ce problème continue de se produire indépendamment de l’ajout du texte ci-dessous:

        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);

La solution que j’ai essayée et travaillée pour moi est de télécharger le chrome et ses outils sur la machine hôte VM/Unix, d’installer et de pointer le fichier binaire sur la suite dans la suite Automation et le bingo! Ça marche :)

Commande de téléchargement: Wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

Commande d'installation: Sudo yum install -y ./google-chrome-stable_current_*.rpm

Suite de mise à jour avec le chemin binaire ci-dessous de google-chrome: Options.setBinary ("/ opt/google/chrome/google-chrome");

Et il fonctionne!

0
parvez basha

Dans mon cas, je suis dans un environnement Kubernetes où je ne peux pas utiliser le TMPDIR par défaut car il remplira le répertoire temporaire avec des ordures.

J'utilisais donc ceci pour utiliser un autre dossier tmpdir:

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

Mais maintenant que j'ai tout mis à niveau, cela ne semble plus fonctionner. Je vais devoir trouver un nouveau moyen de le faire.

0
Nicholas DiPiazza

J'avais le même problème, mais dans mon cas, chrome était précédemment installé dans le dossier utilisateur temporaire, après avoir été réinstallé dans les fichiers du programme. Donc, aucune des solutions fournies ici ne m'aidait. Mais si fournir le chemin vers chrome.exe tout fonctionne:

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

J'espère que cela aide quelqu'un =)

0
Sergiy Konoplyaniy

J'ai rencontré le même problème avec Chrome via Behat/Mink et Selenium dans un conteneur Docker. Après quelques manipulations, je suis arrivé au _behat.yml_ suivant qui fournit les commutateurs mentionnés ci-dessus. Notez que tous étaient nécessaires pour que je puisse le faire fonctionner avec succès.

_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
Chris