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
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
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.
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");
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.
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");
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.
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)
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>
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.
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']
}
},
};
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&
).
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.
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
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.")
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!
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.
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 =)
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"
_