71 votes

Sélénium : WebDriverException:Chrome failed to start : crashed as google-chrome is no longer running so ChromeDriver is assuming that Chrome has crashed

Récemment, j'ai changé d'ordinateur et depuis, je n'arrive pas à lancer Chrome avec Selenium. J'ai également essayé Firefox mais l'instance du navigateur ne se lance pas.

from selenium import webdriver

d = webdriver.Chrome('/home/PycharmProjects/chromedriver')

d.get('https://www.google.nl/')

Je reçois l'erreur suivante :

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.43.600233, platform=Linux 4.15.0-38-generic x86_64)

J'ai la dernière version de chrome et le pilote de chrome installé.

EDIT : Après avoir essayé la solution de @b0sss, j'obtiens l'erreur suivante.

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
  (chrome not reachable)
  (The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so chromedriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d),platform=Linux 4.15.0-38-generic x86_64)

109voto

NgoCuong Points 389

Essayez de télécharger ICI et utilisez la dernière version du pilote de chrome.

https://sites.google.com/a/chromium.org/chromedriver/downloads

EDIT :

Essayez ça :

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
d = webdriver.Chrome('/home/PycharmProjects/chromedriver',chrome_options=chrome_options)
d.get('https://www.google.nl/')

0 votes

J'ai déjà téléchargé la dernière version du pilote chromé à partir de cet emplacement.

0 votes

@SOeh essayez la solution Edited

0 votes

Je pense que cette réponse est pour l'environnement Docker.

27voto

New contributor Points 31198

Ce message d'erreur...

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

...implique que le ChromeDriver n'a pas pu initier/éclater une nouvelle Navigateur Web c'est-à-dire Navigateur Chrome session.

Votre principal problème est le Cromo n'est pas installé sur le site emplacement par défaut dans votre système.

Le serveur, c'est-à-dire ChromeDriver s'attend à ce que vous ayez Cromo installé dans le emplacement par défaut pour chaque système comme dans l'image ci-dessous :

Chrome_binary_expected_location

1 Pour les systèmes Linux, le ChromeDriver s'attend à ce que /usr/bin/google-chrome pour être un lien symbolique vers le binaire actuel de Chrome.


Solution

Si vous utilisez un Cromo exécutable dans un emplacement non standard, vous devez remplacer l'emplacement binaire de Chrome comme suit :

  • Python Solution :

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.binary_location = "C:\\path\\to\\chrome.exe"    #chrome binary location specified here
    options.add_argument("--start-maximized") #open Browser in maximized mode
    options.add_argument("--no-sandbox") #bypass OS security model
    options.add_argument("--disable-dev-shm-usage") #overcome limited resource problems
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get('http://google.com/')
  • Java Solution :

    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    ChromeOptions opt = new ChromeOptions();
    opt.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");  //chrome binary location specified here
    options.addArguments("start-maximized");
    options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(opt);
    driver.get("https://www.google.com/");

13voto

dataviews Points 366

J'espère que cela aidera quelqu'un. Cela a fonctionné pour moi sur Ubuntu 18.10.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)
driver.get('http://www.google.com')
print('test')
driver.close()

8voto

ibaralf Points 2790

J'ai rencontré exactement le même problème en fonctionnant sur un conteneur docker (dans un environnement de construction). Après m'être connecté au conteneur, j'ai essayé d'exécuter le test manuellement et j'ai toujours rencontré le problème suivant

(unknown error: DevToolsActivePort file doesn't exist)
     (The process started from chrome location /usr/bin/google-chrome-stable is 
      no longer running, so ChromeDriver is assuming that Chrome has crashed.)

Lorsque j'ai essayé d'exécuter chrome localement /usr/bin/google-chrome-stable message d'erreur

Running as root without --no-sandbox is not supported

J'ai vérifié les options de mon Chrome et il manquait. --no-sandbox c'est pourquoi il n'a pas pu créer Chrome.

capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
  chromeOptions: { args: %w(headless --no-sandbox disable-gpu window-size=1920,1080) }
)

1 votes

Une autre façon de résoudre ce problème est de ne pas exécuter le processus (dans le conteneur) en tant que Root. C'est mieux du point de vue de la sécurité, de toute façon :)

7voto

Ethan Hill Points 385

J'ai eu un problème similaire, et j'ai découvert que les arguments de l'option doivent être dans un certain ordre . Je ne connais que les deux arguments qui ont été nécessaires pour que cela fonctionne sur ma machine Ubuntu 18. Cet exemple de code a fonctionné de mon côté :

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

d = webdriver.Chrome(executable_path=r'/home/PycharmProjects/chromedriver', chrome_options=options)
d.get('https://www.google.nl/')

1 votes

L'utilisation de l'option --no--sandbox n'est-elle pas un problème de sécurité ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X