InvalidArgumentException: Сообщение: неверный аргумент: каталог данных пользователя уже используется. Ошибка использования --user-data-dir для запуска Chrome с использованием Selenium. - PullRequest
1 голос
/ 30 января 2020

Когда я пытаюсь использовать --user-data-dir для текущего пользователя, чтобы запустить Chrome с помощью Selenium, я получаю сообщение об ошибке:

  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

Как мне исправить эту ошибку?

1 Ответ

3 голосов
/ 04 февраля 2020

Это сообщение об ошибке ...

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 Browser с помощью указано 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. следовательно, создание кеша не удалось, и впоследствии создание Shader Cache Creation не удалось. Хотя эти проблемы поднимают InvalidArgumentException, но принудительно открывают новое окно в существующем Chrome сеансе браузера .

Хотя выдается ошибка, все равно новое окно Chrome инициируется, но остается подключенным к уже открытому сеансу Chrome, но новое окно не может управляться экземпляром WebDriver . Следовательно, вы видите data:, в строке URL.


Решение

Вам необходимо позаботиться о нескольких вещах:

  • Если вы используя Профиль по умолчанию Chrome Профиль для доступа к веб-страницам для вашей другой работы на том же Тестовом компьютере , вы не должны устанавливать user-data-dir как Данные пользователя , поскольку они остаются заблокированными другим процессом Chrome, который вы инициировали вручную.
  • Если вы выполняете свои тесты в изолированной тестовой системе , вы можете установить user-data-dir как . . \ Данные пользователя \ По умолчанию для доступа к По умолчанию Chrome Профиль .
  • Однако, в соответствии с лучшими практиками, вы всегда должны создавать новый Chrome Профиль , чтобы выполнять свои тесты как По умолчанию Chrome Профиль может содержать Расширения , Закладки , История просмотра , et c и могут загружаться неправильно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...