google-chrome - 更新失敗錯誤3或11檢查更新時發生錯誤更新伺服器無法使用 - 檢查更新時發生錯誤無法啟動更新檢查




WebDriverException:未知錯誤:嘗試啟動Chrome瀏覽器時,DevToolsActivePort文件不存在 (12)

我正在嘗試使用URL啟動chrome,瀏覽器啟動,之後它什麼都不做。

我在1分鐘後看到以下錯誤:

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)

我的配置:

Chrome:66 ChromeBrowser:2.39.56

PS在Firefox中一切正常


似乎這個錯誤有很多可能的原因。 在我們的例子中,錯誤發生是因為我們在代碼中有以下兩行:

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

通過刪除第二行解決了這個問題。


在我的情況下,它發生在我嘗試使用我的默認用戶配置文件時:

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

這觸發了chrome來重用已經在後台運行的進程,這樣一來,chromedriver.exe啟動的進程就會結束。

解決方案:終止在後台運行的所有chrome.exe進程。


在我的情況下,我試圖在帶有Chrome瀏覽器的Windows操作系統上創建一個可運行的jar,並希望在帶有CentOs的unix框中的無頭模式下運行。 我正在將我的二進製文件指向我已下載並隨套件打包的驅動程序。 對我來說,無論添加以下內容,這個問題都會繼續發生:

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

我嘗試過並為我工作的解決方案是,在主機VM / Unix盒上下載chrome及其工具,在自動化套件和賓果遊戲中安裝並指向二進製文件! 有用 :)

下載命令:

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

安裝命令:

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

使用以下google-chrome二進制路徑的更新套件:

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

而且..它的作品!


我們在jenkins奴隸(linux機器)上遇到了同樣的問題,並嘗試了上面的所有選項。

唯一有幫助的是設定論點

chrome_options.add_argument('--headless')

但是當我們進一步調查時,注意到XVFB屏幕沒有啟動屬性,這就是導致此錯誤。 在我們修復XVFB屏幕後,它解決了這個問題。


我在python中遇到了同樣的問題。 以上幫助。 這是我在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)

我在與jenkins服務器集成時也遇到了這個問題,我使用了jenkin作業的 root 用戶, 當我將用戶更改為其他用戶時問題得到了解決 。 我不確定為什麼root用戶會出現此錯誤。

谷歌Chrome版本71.0

ChromeDriver版本2.45

CentOS7版本1.153


我有同樣的問題,但在我的情況下,chrome以前安裝在用戶臨時文件夾中,之後重新安裝到程序文件。 所以這裡提供的任何解決方案都沒有幫助我。 但是如果提供chrome.exe的路徑全部工作:

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

我希望這有助於某人=)


我通過安裝 yum -y install gtk3-devel gtk3-devel-docs 解決這個問題“,它運行正常

我的工作環境是:

 Selenium Version 3.12.0 ChromeDriver Version v2.40 Chrome 68 level 

之前:

後:


此錯誤消息...

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

...暗示 ChromeDriver 無法啟動/生成新的 WebBrowser Chrome瀏覽器 會話。

您的代碼試驗和所有二進製文件的版本信息會給我們一些關於出錯的提示。

但是根據 Add --disable-dev-shm-usage到默認啟動標誌 似乎添加了參數 --disable-dev-shm-usage 將臨時解決問題。

如果您希望啟動/跨越新的 Chrome瀏覽器 會話,可以使用以下解決方案:

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

禁用-DEV-SHM-使用

根據 base_switches.cc disable-dev-shm-usage 似乎僅在 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

在討論中 添加一個選項以使用/ tmp而不是/ dev / shm David提到:

我認為這將取決於/ dev / shm和/ tmp的安裝方式。 如果他們都作為tmpfs安裝我假設沒有任何區別。 如果由於某種原因,/ tmp未映射為tmpfs(我認為默認情況下由systemd映射為tmpfs),Chrome共享內存管理總是在創建匿名共享文件時將文件映射到內存中,所以即使在這種情況下也不應該差別很大。 我想你可以在啟用標誌的情況下強制進行遙測測試,看看它是怎麼回事。

至於為什麼不默認使用它,它是由共享內存團隊推回的,我想有意義的是默認情況下應該使用/ dev / shm作為共享內存。

最終所有這一切都應該轉向使用memfd_create,但我認為這不會很快發生,因為它需要顯著重構Chrome內存管理。


沒有解決方案適合我。 但這是一個解決方法:

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

將conf.js中的功能更新為

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

};

更新:

我能夠解決這個問題,現在我可以使用所需的URL訪問chrome。

嘗試提供的解決方案的結果:

我嘗試了上面提供的所有設置,但我無法解決問題

關於這個問題的解釋:

根據我的觀察,當chrome無法在scoped_dirXXXXX文件夾中找到它的引用時,會導致DevToolsActivePort文件不存在。

採取措施解決問題

  1. 我已經殺死了所有的chrome進程和chrome驅動程序進程。
  2. 添加以下代碼以調用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);
    

使用上述步驟,我能夠解決問題。

謝謝你的回答。





selenium-chromedriver