WebDriverException: nieznany błąd: plik DevToolsActivePort nie istnieje podczas próby zainicjowania przeglądarki Chrome

152

Próbuję uruchomić chrome z adresem URL, przeglądarka się uruchamia i nic potem nie robi.

Po 1 minucie widzę poniższy błąd:

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)

Moja konfiguracja:

  • Chrome: 66
  • ChromeBrowser: 2.39.56

PS wszystko działa dobrze w Firefoksie

Kumar Sampath
źródło
1
Czy możesz zaktualizować pytanie o kod, który powoduje ten błąd?
GPT14
Otrzymałem ten błąd, gdy vncserver się zawiesił i nie miałem już wyświetlacza X
xtian

Odpowiedzi:

71

Ten komunikat o błędzie ...

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

... sugeruje, że ChromeDriver był w stanie zainicjować / tarło nowy WebBrowser czyli Chrome sesji.

Twoje testy kodu i informacje o wersji wszystkich plików binarnych dałyby nam pewną wskazówkę, co się dzieje.

Jednak zgodnie z Dodaj --disable-dev-shm-usage do domyślnych flag uruchamiania wydaje się, że dodanie argumentu --disable-dev-shm-usagetymczasowo rozwiąże problem.

Jeśli chcesz zainicjować / rozszerzyć nową sesję przeglądarki Chrome , możesz skorzystać z następującego rozwiązania:

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

wyłącz-dev-shm-użycie

Zgodnie z base_switches.cc disable-dev-shm-usage wydaje się działać tylko w systemie operacyjnym Linux :

#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

W dyskusji Dodaj opcję użycia / tmp zamiast / dev / shm David wspomina:

Myślę, że zależałoby to od tego, jak są zamontowane / dev / shm i / tmp. Jeśli oba są zamontowane jako tmpfs, zakładam, że nie będzie żadnej różnicy. jeśli z jakiegoś powodu / tmp nie jest mapowane jako tmpfs (i myślę, że jest mapowane domyślnie jako tmpfs przez systemd), zarządzanie pamięcią współdzieloną chrome zawsze mapuje pliki do pamięci podczas tworzenia anonimowych plików współdzielonych, więc nawet w tym przypadku nie powinno być duża różnica. Myślę, że możesz wymusić testy telemetryczne z włączoną flagą i zobaczyć, jak to działa.

Jeśli chodzi o to, dlaczego nie używać domyślnie, zostało to odrzucone przez zespół pamięci współdzielonej, myślę, że ma sens, aby domyślnie używać / dev / shm do pamięci współdzielonej.

Ostatecznie wszystko to powinno zmierzać do użycia memfd_create, ale nie sądzę, aby miało to nastąpić w najbliższym czasie, ponieważ będzie to wymagało znacznej refaktoryzacji zarządzania pamięcią Chrome.


Outro

Oto link do historii Sandbox .

DebanjanB
źródło
8
Ale co spowodowało ten konkretny błąd DevToolsActivePort file doesn't existi dlaczego nagle zaczął się pojawiać?
3
Pozycje „Dodatkowe uwagi” - wyglądają na odpowiednie do tego problemu. Szczególnie tego rodzaju sytuacja, w której nie ustalono dokładnie, co spowodowało problem.
Pete Kelley,
5
Z usuniętej części posta @ DebanjanB może to być spowodowane użyciem Chromedrivera, który nie obsługuje wersji zainstalowanego Chrome. Może się to zdarzyć, na przykład, jeśli Chrome zostanie zaktualizowany bez aktualizacji Chromedriver.
expz
To służyło mi do rozwiązania problemu, nie występuje w moim obecnym systemie (Ubuntu 18 + Python 3.7)
tw0000
3
Jeśli to pomoże komuś innemu, samo dodanie disable-dev-shm-usagenie wystarczyło. Musiałem też dodać, --no-sandboxżeby to zadziałało. To była dla mnie kompletna poprawka dla Selenium-java:chromeOptions.addArguments("--no-sandbox", "--disable-dev-shm-usage");
George Pantazes
52

Zacząłem widzieć ten problem w poniedziałek 04.06.2018. Nasze testy przeprowadzamy każdego dnia tygodnia. Wygląda na to, że jedyną rzeczą, która się zmieniła, była wersja google-chrome (która została zaktualizowana do aktualnej) JVM i Selenium to najnowsze wersje na Linuksie (Java 1.8.0_151, selenium 3.12.0, google-chrome 67.0.3396.62 i xvfb-run).
W szczególności dodanie argumentów „ --no-sandbox ” i „ --disable-dev-shm-usage ” zatrzymało błąd. Przyjrzę się tym problemom, aby znaleźć więcej informacji na temat efektu i innych pytań, np. Co spowodowało aktualizację Google Chrome.

ChromeOptions options = new ChromeOptions();
        ...
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
Pete Kelley
źródło
Chcę wyjaśnić, że ten kod był uruchamiany każdego dnia tygodnia na komputerze z systemem Ubuntu Linux, ale równoważny kod na pulpicie systemu Windows działał poprawnie nawet w poniedziałek. Nie znalazłem informacji o tym, do czego służy funkcjonalność pliku DevToolsActivePort i to też by się przydało. PK
Pete Kelley
1
Te opcje również zatrzymały błąd. pd: używanie stosu Railsów.
Mario Pérez
Nadal dostaję [java] [1536892035.965][SEVERE]: Timed out receiving message from renderer: 60.000błędy nawet z tym
Jonathan,
@Jonathan - Cześć! czy możesz podać więcej szczegółów, na przykład, który system operacyjny, jakich wersji komponentów używasz lub jak wywołujesz ten proces?
Pete Kelley
@Toby: Cześć! Nie chciałem sugerować, że to stanowisko robi różnicę, tylko minimalne wykorzystanie tych parametrów. Wydawało się, że niektóre z domyślnych wartości, na których polegałem, zostały zmienione podczas aktualizacji. Wszelkie inne szczegóły dotyczące systemu lub przekazana wiadomość mogą pomóc.
Pete Kelley
35

Mieliśmy te same problemy z naszymi niewolnikami Jenkinsa (maszyną z systemem Linux) i wypróbowaliśmy wszystkie powyższe opcje.

Jedyne, co pomogło, to ustawienie argumentu

chrome_options.add_argument('--headless')

Ale kiedy zbadaliśmy dalej, zauważyliśmy, że ekran XVFB nie rozpoczął właściwości i to powoduje ten błąd. Po naprawieniu ekranu XVFB rozwiązano problem.

Sreejith Edayillam
źródło
2
rozwiązało to mój problem podczas uruchamiania w C # (w tym przypadku opcja wyglądała tak: options.AddArgument ("- headless");
ozz
XVFB był dla mnie
problemem
23

Miałem ten sam problem w Pythonie. Powyższe pomogło. Oto, czego użyłem w Pythonie -

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)
Vinodh Periyasamy
źródło
Rozwiązałem swój problem z aktualizacją chrome (miałem już najnowszy chromedrive), stąd też musiałem zaktualizować zwykłą przeglądarkę.
axel_ande,
18

Aktualizacja:

Jestem w stanie rozwiązać ten problem i teraz mogę uzyskać dostęp do przeglądarki Chrome z żądanym adresem URL.

Rezultaty wypróbowania dostarczonych rozwiązań:

Wypróbowałem wszystkie ustawienia podane powyżej, ale nie udało mi się rozwiązać problemu

Wyjaśnienie dotyczące problemu:

Zgodnie z moją obserwacją plik DevToolsActivePort nie istnieje, gdy chrome nie może znaleźć swojego odniesienia w folderze scoped_dirXXXXX.

Kroki podjęte w celu rozwiązania problemu

  1. Zabiłem wszystkie procesy Chrome i procesy sterownika Chrome.
  2. Dodano poniższy kod, aby wywołać 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);
    

Wykonując powyższe czynności, udało mi się rozwiązać problem.

Dziękuję za odpowiedzi.

Kumar Sampath
źródło
3
Czy wiesz, jaki wpływ ma useAutomationExtension? Wyłącza rozszerzenia automatyzacji (zrzuty ekranu / sterowanie itp.) Nie? Czy pojawienie się DevTools nie powinno sprawić, że ta zmiana nie będzie miała wpływu? codereview.chromium.org/2785413002
Toby
10

Ostatnio miałem do czynienia z tym samym problemem i po kilku próbach i błędach zadziałało to również dla mnie.

MUSI BYĆ NA GÓRZE:

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>
Nital
źródło
Ciekawy ! Jak generujesz plik .side? Czy jest to coś, co osoba odpowiedzialna za kontrolę jakości wykonuje ręcznie?
Nital
Używasz Selenium IDE do nagrywania testu. Wynikiem jest plik .side. Działa dobrze przy użyciu IDE, ale próbuję go uruchomić przy użyciu selenu-side-runner, ale napotykam na różnego rodzaju problemy z chromedriver.
pabrams
musi być pierwszą opcją - spędzić dni, aby znaleźć to haha
cuniculus
Dzięki! Dodanie „--no-sandbox” rozwiązuje mój problem.
matabares
7

W moim przypadku w następującym środowisku:

  • Windows 10
  • Pyton 3.7.5
  • Google Chrome w wersji 80 i odpowiadający sterownik ChromeDriver w ścieżce C:\Windows
  • selen 3.141.0

Musiałem dodać argumenty --no-sandboxi --remote-debugging-port=9222do ChromeOptionsobiektu i uruchomić kod jako administrator, uruchamiając Powershell / cmd jako administrator.

Oto powiązany fragment kodu:

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(options=options)
Soheil Pourbafrani
źródło
1
to samo dla mnie z dockerem z ubuntu 18.04, py3.7, chrome (driver) 80
patroqueeet
To zadziałało dla mnie bez dalszych problemów. Właśnie dzisiaj zacząłem napotykać ten problem, ale dzięki Twojej odpowiedzi został on szybko rozwiązany! Moje środowisko jest zasadniczo takie samo jak twoje.
Ryan Harris
5

Napotkałem ten problem na Ubuntu 20 z Python Selenium po pierwszym pobraniu chromedrivera osobno, a następnie użyciu sudo apt install chromium-browserMimo że były to ta sama wersja, to się działo.

Moja poprawka polegała na użyciu dostarczonego sterownika Chrome, który został dostarczony z pakietem repozytorium znajdującym się pod adresem

/snap/bin/chromium.chromedriver

driver = webdriver.Chrome(chrome_options=options, executable_path='/snap/bin/chromium.chromedriver')
Lelouch
źródło
4

Jak stwierdzono w tej innej odpowiedzi :

Ten komunikat o błędzie ... oznacza, że ​​sterownik ChromeDriver nie mógł zainicjować / odrodzić nowej przeglądarki internetowej, tj. Sesji przeglądarki Chrome.

Wśród możliwych przyczyn, chciałbym wspomnieć fakt, że w przypadku, gdy prowadzisz Chromium bezgłowe poprzez Xvfb, to może trzeba exportdo DISPLAYzmiennej: w moim przypadku, miałem na miejscu (zgodnie z zaleceniami) --disable-dev-shm-usagei --no-sandboxopcje, wszystko było działa dobrze, ale w nowej instalacji z najnowszym (w momencie pisania) Ubuntu 18.04 ten błąd zaczął się pojawiać, a jedyną możliwą poprawką było wykonanie export DISPLAY=":20"(po wcześniejszym uruchomieniu Xvfb z Xvfb :20&).

Piercarlo Slavazza
źródło
OMG Dziękuję. Robiłem kilka zmian w naszym kontenerze docker i przypadkowo pominąłem xvfb. Nigdy bym tego nie znalazł, gdybyś nie zostawił tego tutaj :-).
Ryan Shillington
3

Miałem również do czynienia z tym problemem podczas integracji z serwerem jenkins, byłem używany jako użytkownik root do pracy jenkin, problem został rozwiązany, gdy zmieniłem użytkownika na innego użytkownika . Nie jestem pewien, dlaczego ten błąd występuje u użytkownika root.

  • Google Chrome w wersji 71.0.1
  • ChromeDriver w wersji 2.45.1
  • CentOS7 wersja 1.153.0
Osanda Deshan
źródło
Użytkownik inny niż root pracował dla mnie, miałem poprawną wersję sterownika Chrome dla chromu.
TicJit
2

W moim przypadku stało się to, gdy próbowałem użyć domyślnego profilu użytkownika:

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

To spowodowało, że chrome ponownie wykorzystał procesy już uruchomione w tle, w taki sposób, że proces rozpoczęty przez chromedriver.exe został po prostu zakończony.

Rozwiązanie: zabij wszystkie procesy chrome.exe działające w tle.

radzimir
źródło
Miałem podobny problem, ale w Linuksie - moje procesy chrome nie były poprawnie zamykane po awarii skryptu i były ponownie nieprawidłowo używane. zabicie ich rozwiązało problem
jeremycg
2

możliwości aktualizacji w conf.js jako

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

};
user2694064
źródło
2

W moim przypadku próbowałem stworzyć działający jar w systemie operacyjnym Windows z przeglądarką chrome i chcę uruchomić to samo w trybie headless w unix box z CentOs na nim. Wskazywałem plik binarny na sterownik, który pobrałem i spakowałem z pakietem. U mnie ten problem nadal występuje niezależnie od dodania poniższego:

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

Rozwiązaniem, które wypróbowałem i pracowałem dla mnie, jest pobranie chrome i jego narzędzi z hosta VM / Unix box, zainstalowanie i wskazanie tego pliku binarnego w pakiecie automatyzacji i bingo! To działa :)

Polecenie pobierania:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

Polecenie instalacji:

sudo yum install -y ./google-chrome-stable_current_*.rpm

Zaktualizuj pakiet za pomocą poniższej ścieżki binarnej google-chrome:

options.setBinary("/opt/google/chrome/google-chrome");

I… to działa!

parvez basha
źródło
Gdzie dodajemy ten kod? Nie widzę kodu C # w moim pliku
.side
1

Miałem ten sam problem, ale w moim przypadku chrome był wcześniej zainstalowany w folderze tymczasowym użytkownika, po czym został ponownie zainstalowany w plikach programu. Żadne z przedstawionych tutaj rozwiązań nie pomogło mi. Ale jeśli podasz ścieżkę do chrome.exe, wszystko działa:

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

Mam nadzieję, że to komuś pomoże =)

Sergiy Konoplyaniy
źródło
wydaje się być dokładnym przeciwieństwem poprawki @shiuu poniżej
Toby
1

Żadne rozwiązanie nie zadziałało dla mojego. Ale oto obejście:

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.")
Alex
źródło
1

Możesz otrzymać ten błąd po prostu za przekazanie złych argumentów do Chrome. Na przykład, jeśli przejdę "headless"jako argument do sterownika C # ChromeDriver, działa świetnie. Jeśli popełnię błąd i użyję niewłaściwej składni, "--headless"otrzymam DevToolsActivePort file doesn't existbłąd.

Chris Moschini
źródło
1

Napotkałem ten sam problem, używam przeglądarki UBUNTU, PYTHON i OPERA . w moim przypadku problem powstał, ponieważ miałem przestarzałą wersję operadrivera.

Rozwiązanie: 1. Upewnij się, że zainstalowałeś najnowszą wersję przeglądarki opera (nie używaj opera beta ani opera developer), w tym celu przejdź na oficjalną stronę opery i pobierz stamtąd najnowszą wersję opera_stable.

  1. Zainstaluj najnowszy sterownik opera (jeśli masz już instalację sterownika opera, musisz go najpierw usunąć, użyj sudo rm ...)

wget https://github.com/operasoftware/operachromiumdriver/releases/download/v.80.0.3987.100/operadriver_linux64.zip

   unzip operadriver_linux64.zip
   sudo mv operadriver /usr/bin/operadriver
   sudo chown root:root /usr/bin/operadriver
   sudo chmod +x /usr/bin/operadriver

w moim przypadku ostatnia to 80.0.3987, jak widać

  1. Dodatkowo zainstalowałem również chromedriver (ale ponieważ zrobiłem to przed testowaniem, nie wiem, czy to jest potrzebne), aby zainstalować chromedriver, wykonaj kroki z poprzedniego kroku: v

  2. Ciesz się i dziękuję!

Przykładowy kod selenu

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Opera()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.quit()
Adrian Jimenez
źródło
0

Wydaje się, że istnieje wiele możliwych przyczyn tego błędu. W naszym przypadku błąd wystąpił, ponieważ mieliśmy w kodzie następujące dwie linie:

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

Rozwiązuje się to poprzez usunięcie drugiej linii.

shiuu
źródło
wydaje się być dokładnym przeciwieństwem powyższej poprawki @ sergiy-konoplyaniy: '(
Toby
W naszym setBinary próbowaliśmy ustawić sterownik chrome, co wydaje się błędem. Zestawy poprawek @ sergiy-konoplyaniy chrome.exe przez setBinary.
shiuu,
Gdzie masz ten kod? Wszystko, co mam, to plik .side i nie ma w nim kodu C #.
pabrams
0

Napotkałem ten sam problem z uruchomieniem Chrome przez Behat / Mink i Selenium w kontenerze Docker. Po kilku zabawach dotarłem do następującego, behat.ymlktóre dostarcza wymienione powyżej przełączniki. Zauważ, że wszystkie z nich były wymagane, aby pomyślnie go uruchomić.

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"
Chris
źródło
0

W moim przypadku jestem w środowisku Kubernetes, w którym nie mogę użyć domyślnego TMPDIR, ponieważ zapełni on katalog tymczasowy śmieciami.

Więc użyłem tego, aby użyć innego tmpdir:

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

Ale teraz, gdy zaktualizowałem wszystko do najnowszego, wydaje się, że to już nie działa. Będę musiał znaleźć nowy sposób, aby to zrobić.

Nicholas DiPiazza
źródło
0

Dzieje się tak, gdy chromedriver nie może dowiedzieć się, jakiego portu debugowania używa chrome.

Jedną z możliwych przyczyn jest otwarta usterka z HKEY_CURRENT_USER \ Software \ Policies \ Google \ Chrome \ UserDataDir

Ale w moim ostatnim przypadku była to inna niezidentyfikowana przyczyna.

Na szczęście ręczne ustawienie numeru portu zadziałało:

final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);
radzimir
źródło
2
Czy to stały port? Albo gdzie mogę tego szukać?
Mike Shiyan
0

W moim przypadku zły numer portu. Sprawdź, czy numer portu podczas uruchamiania serwera Selenium jest taki sam jak w skrypcie.

Jaroslav Štreit
źródło
-2

Rozwiązuję ten problem instalując yum -y install gtk3-devel gtk3-devel-docs”, działa dobrze

Moje środowisko pracy to:

Selenium Version 3.12.0
ChromeDriver Version v2.40
Chrome 68 level

Przed:
wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

Po:
wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

何贤勇
źródło
9
Z recenzji: Nie publikuj tekstu w obrazach. ZMIEŃ swoją odpowiedź i zamień te obrazy na tekst. Dzięki
sɐunıɔ ןɐ qɐp
1
Czy to rozwiązuje problem dla kogoś? To nie rozwiązało problemu
Bendram
-2

Ponieważ jest to najbardziej aktywna wiadomość dla tego typu błędu, chciałem wspomnieć o moim rozwiązaniu (po spędzeniu godzin na naprawie tego).

W Ubuntu 18.04, używając Chrome 70 i Chromedriver 2.44 oraz Python3, ciągle otrzymywałem ten sam błąd DevToolsActivePort, nawet gdy wyłączyłem wszystkie wymienione powyżej opcje. Plik dziennika chromedriver, a także ps pokazały, że chromedriver, który ustawiłem w chrome_options.binary_location, działał, ale zawsze powodował błąd DevToolsActivePort. Kiedy usunąłem chrome_options.binary_location = '....' i dodałem go do tworzenia webdrivera, działało dobrze. webdriver.Chrome ('/ ścieżka do ... / chromedriver', chrome_options = chrome_options)

Dziękuję wszystkim za uwagi, które pozwalają mi zrozumieć i rozwiązać problem.

Obrc
źródło