14

当我尝试让--user-data-dir当前用户使用 Selenium 启动 Chrome 时,出现以下错误:

  File "C:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

我该如何解决这个错误?

4

5 回答 5

15

此错误消息...

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

...意味着ChromeDriver无法使用指定的启动新的Chrome 浏览器会话,user data directory因为它已经在使用中。

这个错误可以重现如下:

  • 代码块:

    from selenium import webdriver
    import getpass
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument(r"--user-data-dir=C:\Users\{}\AppData\Local\Google\Chrome\User Data".format(getpass.getuser()))
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get("https://www.google.com/")
    
  • 完成相关回溯:

    [12148:21412:0204/035557.731:ERROR:cache_util_win.cc(21)] Unable to move the cache: Access is denied. (0x5)
    [12148:21412:0204/035557.731:ERROR:cache_util.cc(141)] Unable to move cache folder C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\ShaderCache\GPUCache to C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\ShaderCache\old_GPUCache_000
    [12148:21412:0204/035557.731:ERROR:disk_cache.cc(178)] Unable to create cache
    [12148:21412:0204/035557.731:ERROR:shader_disk_cache.cc(605)] Shader Cache Creation failed: -2
    Opening in existing browser session.
    Traceback (most recent call last):
      File "C:\Users\Soma Bhattacharjee\Desktop\Debanjan\PyPrograms\yandex_ru.py", line 18, in <module>
        driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
      File "C:\Python\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 81, in __init__
        desired_capabilities=desired_capabilities)
      File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
        self.start_session(capabilities, browser_profile)
      File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
        response = self.execute(Command.NEW_SESSION, parameters)
      File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "C:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir
    

分析

错误堆栈跟踪清楚地抱怨访问被拒绝,因为程序无法将缓存文件夹移动..\ShaderCache\GPUCache..\ShaderCache\old_GPUCache_000. 因此创建缓存失败,随后创建着色器缓存失败。尽管这些问题引发了InvalidArgumentException但能够在现有的Chrome 浏览器会话中打开一个新窗口。

尽管抛出了错误,但新的 Chrome 窗口仍会启动,但仍与已打开的Chrome会话连接,但新窗口无法由WebDriver实例控制。因此,您会data:,在 url 栏中看到。


解决方案

你需要注意几件事:

  • 如果您使用默认 Chrome 配置文件在同一台测试机上访问其他工作的网页,则不应将其设置user-data-dir用户数据,因为它仍被您手动启动的其他 Chrome 进程锁定。
  • 如果您在隔离的测试系统中执行测试,您可以设置user-data-dir..\User Data\Default以访问默认 Chrome 配置文件
  • 然而,根据最佳实践,您必须始终创建一个新的Chrome 配置文件来执行您的测试,因为默认 Chrome 配置文件可能包含ExtensionsBookmarksBrowsing History等,并且可能无法正确加载。
于 2020-02-03T23:29:13.367 回答
3

最简单和最简单的解决方法是;清除现有已打开的 chrome 驱动程序:步骤如下:在 Spotlight 搜索/在任务栏的搜索窗口中键入任务管理器或使用其他方式访问任务管理器。当任务管理器向导/窗口弹出时,搜索 chromedriver,右键单击它,然后单击“结束任务”。而已。这不是一个永恒的解决方案。多次打开 chrome 浏览器后,您必须执行相同的步骤来避免该问题。希望这有助于我寻找稳定的修复程序。

于 2020-05-12T19:46:23.670 回答
0

正如Tes 的回答所提到的,我打开了 Windows 任务管理器并关闭了所有 chrome.exe 和 chromedriver.exe 进程,它工作了!!!

我使用这些配置通过我的 Chrome 配置文件打开 Google Chrome:

options = webdriver.ChromeOptions()
    options.add_argument('user-data-dir=C:\\Users\\my_user\\AppData\\Local\\Google\\Chrome\\User Data')
    driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=options)
于 2020-07-15T07:47:14.597 回答
-1

System.setProperty("webdriver.chrome.driver", "C://Users//Mhamed//Desktop//chromedriver.exe");

               ChromeOptions options = new ChromeOptions();

                                options.setExperimentalOption("useAutomationExtension", false);

                      WebDriver        driver = new ChromeDriver(options);

                



        

  driver.manage().window().fullscreen();

         driver.get("");
于 2021-01-20T01:29:48.403 回答
-1

只是在尝试跳过登录过程时遇到了同样的问题,解决方案是关闭已经打开的浏览器。

于 2021-06-12T23:05:52.193 回答