it-swarm.com.de

org.openqa.Selenium.WebDriverException: unbekannter Fehler: Die DevToolsActivePort-Datei ist beim Versuch, den Chrome Browser zu starten, nicht vorhanden

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

51
Kumar Sampath

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  

  1. Ich habe alle Chromprozesse und Chromtreiberprozesse beendet.
  2. 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.

6
Kumar Sampath

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

disable-dev-shm-usage

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. 

24
DebanjanB

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");
20
Pete Kelley

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.

10

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

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

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.

2
radzimir

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

};
1
user2694064

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

1

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.

0
shiuu

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

0
Osanda Deshan

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

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!

0
parvez basha

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.

0

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

0

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"
0
Chris