selenium InvalidArgumentException:消息:无效参数:用户数据目录已在使用使用--user-data-dir启动Chrome时出错

wr98u20j  于 2022-11-10  发布在  其他
关注(0)|答案(6)|浏览(425)

当我尝试使用--user-data-dir让当前用户使用Selify启动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

如何修复此错误?

yshpjwxd

yshpjwxd1#

此错误消息...

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无法使用指定的user data directory启动新的Chrome Browser会话,因为它已在使用中。
此错误可按如下方式重现:

  • 代码块:
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缓存创建失败。虽然这些问题引发了InvalidArgumentException,但仍然能够在现有的Chrome浏览器会话中打开一个新窗口。
虽然抛出了错误,但新的Chrome窗口仍然会被启动,但仍然会附加到已经打开的Chrome会话中,但新窗口不能由WebDriver示例控制。因此,您可以在URL栏中看到data:,

解决方案

你需要处理几件事:

  • 如果您在同一台测试机上使用[默认Chrome配置文件]访问其他工作的网页,则不应将**user-data-dir设置为用户数据**,因为它仍被您手动启动的其他Chrome进程锁定。
  • 在上面的场景中,您需要创建和使用另一个Chrome配置文件,您可以在如何通过Python打开Chrome配置文件中找到详细的讨论
  • 如果您是在隔离的测试系统中执行测试,您可以将**user-data-dir设置为..\User Data\Default以访问*默认Chrome配置文件
  • 在上面的场景中,您需要创建和使用另一个Chrome配置文件,您可以在How to Use Chrome Profile in Selum WebDriver Python3中找到详细的讨论
  • 但是,根据最佳实践,您必须始终创建新的Chrome配置文件来执行测试,因为默认Chrome配置文件可能包含扩展名书签浏览历史记录等,并且可能无法正确加载。
  • 您可以在如何通过Selify的--user-data-dir参数打开Chrome配置文件中找到详细的讨论
1tuwyuhd

1tuwyuhd2#

最简单和最容易的修复方法是:清除现有打开的Chrome驱动程序:以下是步骤:在任务栏的搜索窗口中输入任务管理器到Spotlight Search/,或使用其他方式访问任务管理器。当任务管理器向导/窗口弹出时,搜索chromeDriver,右击它,然后点击“结束任务”。就这样。这不是一个永恒的解决办法。一旦你多次打开Chrome浏览器,你就必须做同样的步骤来避免这个问题。希望这有助于我寻找一个稳定的解决方案。

dauxcl2d

dauxcl2d3#

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

xuo3flqw

xuo3flqw4#

正如Tes answer提到的,我打开了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)
gwbalxhn

gwbalxhn5#

据我所知,在使用配置文件时,不允许打开多个同名的配置文件。
This帮助我解决了关于 selenium 的user data directory is already in use问题。我希望这对你也有帮助。

um6iljoc

um6iljoc6#

System.setProperty(“Webdriver.chrome.drive”,“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("");

相关问题