Ich versuche, Chrome mit einer URL zu starten, der Browser wird gestartet und danach nichts mehr gemacht.
Ich sehe nach 1 Minute den folgenden Fehler:
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)
Meine Konfiguration:
Chrome: 66 ChromeBrowser: 2.39.56
P. alles funktioniert gut in Firefox
Update:
Ich bin in der Lage, das Problem zu lösen und kann nun mit der gewünschten URL auf das Chrome zugreifen.
Ergebnisse des Versuchs der bereitgestellten Lösungen:
Ich habe alle Einstellungen wie oben angegeben ausprobiert, konnte das Problem jedoch nicht beheben
Erklärung zum Problem:
Nach meiner Beobachtung wird die DevToolsActivePort-Datei nicht erstellt, wenn Chrome seine Referenz im Ordner scoped_dirXXXXX nicht finden kann.
Schritte zur Lösung des Problems
Der folgende Code wurde hinzugefügt, um den Chrome aufzurufen
System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get(url);
Mit den obigen Schritten konnte ich das Problem beheben.
Danke für deine Antworten.
Diese Fehlermeldung ...
org.openqa.Selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
... impliziert, dass der ChromeDriver keine neue WebBrowser - Sitzung starten konnte, d. h. Chrome Browser - Sitzung.
Ihre Code-Versuche und die Versionsinformationen aller Binärdateien hätten uns einen Hinweis darauf geben können, was schief läuft.
Gemäß Hinzufügen --disable-dev-shm-usage zu Standardstartflags scheint das Hinzufügen des Arguments --disable-dev-shm-usage
das Problem temporär zu beheben.
Wenn Sie eine neue Chrome Browser -Sitzung initiieren möchten, können Sie die folgende Lösung verwenden:
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");
Gemäß base_switches.ccdisable-dev-shm-usage
scheint nur für Linux OS gültig zu sein:
#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
In der Diskussion Fügen Sie eine Option hinzu, um/tmp anstelle von/dev/shm zu verwenden. David erwähnt:
Ich denke es würde davon abhängen, wie/dev/shm und/tmp gemountet werden. Wenn beide als tmpfs eingehängt sind, gehe ich davon aus, dass es keinen Unterschied gibt. Wenn/tmp aus irgendeinem Grund nicht als tmpfs zugeordnet ist (und ich denke, dass dies standardmäßig von systemd als tmpfs zugeordnet wird), ordnet die Chrome Shared Memory-Verwaltung beim Erstellen anonymer gemeinsam genutzter Dateien immer Dateien in den Speicher, sodass dies auch in diesem Fall nicht der Fall sein sollte viel unterschied Ich denke, Sie könnten Telemetrietests mit aktivierter Flagge erzwingen und sehen, wie es läuft.
Warum nicht standardmäßig verwendet, wurde es vom Shared Memory Team zurückgedrängt. Ich denke, es macht Sinn, dass es/dev/shm standardmäßig für Shared Memory verwendet.
Letztendlich sollte sich dies alles auf die Verwendung von memfd_create übertragen, aber ich denke nicht, dass dies bald geschehen wird, da die Chrome-Speicherverwaltung erheblich umgebaut werden muss.
Ich habe dieses Problem am Montag 2018-06-04 gesehen. Unsere Tests laufen jeden Wochentag. Das einzige, was sich geändert hat, war anscheinend die google-chrome-Version (die auf den aktuellen Stand gebracht wurde). JVM und Selenium waren aktuelle Versionen unter Linux (Java 1.8.0_151, Selenium 3.12.0, google-chrome 67.0.3396.62 und xvfb-run).
Durch das Hinzufügen der Argumente " --no-sandbox " und " --disable-dev-shm-usage " wurde der Fehler gestoppt. Ich werde in diesen Fragen nachschauen, um mehr Informationen über den Effekt und andere Fragen zu finden, wie Google-Chrome das Update ausgelöst hat.
ChromeOptions options = new ChromeOptions();
...
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
Wir hatten die gleichen Probleme mit unseren Jenkins-Slaves (Linux-Maschine) und haben alle oben genannten Optionen ausprobiert.
Das einzige, was geholfen hat, ist das Argument zu setzen
chrome_options.add_argument('--headless')
Als wir jedoch weiter untersuchten, fiel auf, dass der XVFB-Bildschirm die Eigenschaft nicht gestartet hat, und das verursacht diesen Fehler. Nachdem wir den XVFB-Bildschirm behoben hatten, wurde das Problem behoben.
Ich hatte das gleiche Problem in Python. Das oben genannte hat geholfen. Hier ist was ich in Python verwendet habe -
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)
Ich war kürzlich mit demselben Problem konfrontiert und nach einigem Ausprobieren funktionierte es auch für mich.
MUSS OBEN SEIN:
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>
In meinem Fall ist es passiert, als ich versucht habe, mein Standardbenutzerprofil zu verwenden:
...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...
Dies löste Chrome aus, um Prozesse wiederzuverwenden, die bereits im Hintergrund ausgeführt wurden. Der durch chromedriver.exe gestartete Prozess wurde einfach beendet.
Lösung: Beenden Sie alle chrome.exe-Prozesse, die im Hintergrund ausgeführt werden.
Aktualisierungsfunktionen in conf.js als
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']
}
},
};
Wie in angegeben, lautet diese andere Antwort :
Diese Fehlermeldung ... impliziert, dass ChromeDriver keine neue WebBrowser-Sitzung initiieren/erzeugen konnte, d. H. Chrome Browsersitzung.
Unter den möglichen Ursachen möchte ich die Tatsache erwähnen, dass Sie für den Fall, dass Sie ein kopfloses Chromium über Xvfb betreiben möglicherweise export
die DISPLAY
Variable: in meinem Fall hatte ich (wie empfohlen) die --disable-dev-shm-usage
und --no-sandbox
Optionen, alles lief gut, aber in einer neuen Installation mit der neuesten ( Zum Zeitpunkt des Schreibens von Ubuntu 18.04 begann dieser Fehler aufzutreten, und die einzig mögliche Korrektur bestand darin, einen export DISPLAY=":20"
auszuführen (nachdem zuvor Xvfb mit Xvfb :20&
gestartet worden war).
Es scheint, dass es viele mögliche Ursachen für diesen Fehler gibt. In unserem Fall ist der Fehler aufgetreten, weil wir die folgenden zwei Zeilen im Code hatten:
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);
Es wird gelöst, indem die zweite Zeile entfernt wird.
Bei der Integration mit dem jenkins-Server war ich auch mit diesem Problem konfrontiert. Ich wurde mit dem Benutzer root für den Job jenkin verwendet. Das Problem mit wurde behoben, als ich den Benutzer in einen anderen Benutzer wechselte. Ich bin nicht sicher, warum dieser Fehler für den Rootbenutzer auftritt.
Google Chrome Version 71.0
ChromeDriver Version 2.45
CentOS7 Version 1.153
Keine Lösung hat für mich funktioniert. Hier ist jedoch eine Problemumgehung:
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.")
In meinem Fall habe ich versucht, ein lauffähiges Glas unter Windows mit Chrome-Browser zu erstellen, und ich möchte dasselbe im Headless-Modus in einer Unix-Box mit CentOs ausführen. Ich habe meine Binärdatei auf einen Treiber verwiesen, den ich heruntergeladen und in meine Suite gepackt habe. Für mich tritt dieses Problem weiterhin auf, unabhängig davon, ob Sie Folgendes hinzufügen:
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);
Eine Lösung, die ich für mich ausprobiert und gearbeitet habe, ist, den Chrome und seine Tools von der Host VM/Unix-Box herunterzuladen, zu installieren und die Binärdatei darauf in der Automation Suite und Bingo zu zeigen! Es klappt :)
Laden Sie den Befehl herunter: Wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
Installationsbefehl: Sudo yum install -y ./google-chrome-stable_current_*.rpm
Aktualisieren Sie die Suite mit dem binären Pfad von google-chrome: Options.setBinary ("/ opt/google/chrome/google-chrome");
Und es funktioniert!
In meinem Fall bin ich in einer Kubernetes-Umgebung, in der ich das Standard-TMPDIR nicht verwenden kann, weil es das temporäre Verzeichnis mit Müll füllen wird.
Also habe ich dies verwendet, um ein anderes tmpdir zu verwenden:
driver = new ChromeDriver(new ChromeDriverService.Builder()
.withEnvironment(ImmutableMap.of("TMPDIR", customTmpPath))
.build(), options);
Aber jetzt, da ich alles auf den neuesten Stand gebracht habe, scheint dies nicht mehr zu funktionieren. Ich werde einen neuen Weg finden müssen, um dies zu tun.
Ich hatte das gleiche Problem, aber in meinem Fall wurde Chrome zuvor im temporären Ordner des Benutzers installiert. Danach wurde das Programm erneut installiert. Daher half mir jede hier angebotene Lösung nicht. Wenn aber Pfad zu chrome.exe bereitstellt, funktioniert alles:
chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
Ich hoffe das hilft jemandem =)
Ich bin auf dasselbe Problem gestoßen, bei dem Chrome über Behat/Mink und Selen in einem Docker-Container ausgeführt wurde. Nach einigem Hin und Her bin ich zu folgendem behat.yml
gekommen, der die oben genannten Schalter liefert. Beachten Sie, dass alle von ihnen erforderlich waren, damit ich es erfolgreich ausführen konnte.
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"