gpt4 book ai didi

python - 无效参数异常 : Message: invalid argument: user data directory is already in use error while initiating Chrome with ChromeDriver Selenium

转载 作者:行者123 更新时间:2023-12-03 14:48:40 26 4
gpt4 key购买 nike

我正在尝试使用我的默认用户使用 selenium python 库打开一个网页,脚本使用默认用户很重要,但是如果我的 chrome 浏览器已经打开,脚本会崩溃并给我这个错误:

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

我已经尝试了这里给出的所有解决方案:

Selenium chromedriver won't launch URL if another chrome instance is open

Selenium won't open a new URL in a new tab (Python & Chrome)

并阅读旧版 chromedriver 版本中存在错误,但已在 chrome 74 中修复(我正在使用):
https://github.com/SeleniumHQ/docker-selenium/issues/741
from selenium import webdriver
import time
from getpass import getuser

def run():
# Chrome driver path
chromedriver = r'C:\Users\user1\Downloads\chromedriver_win32\chromedriver_new.exe'

# Get chrome webdriver options and set open the browser as headless
chrome_options = webdriver.ChromeOptions()
#chrome_options.add_argument("--headless")

# Fix for selenium Issue 2907
#chrome_options.add_argument('--log-level=3')
#chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])

# Load current user default profile
current_user = getuser()
chrome_options.add_argument(
r"--user-data-dir=C:\Users\{}\AppData\Local\Google\Chrome\User Data".format(current_user))

# didable "Chrome is being controled by an automated test software"
chrome_options.add_argument('disable-infobars')

# get Chrome to stay open
chrome_options.add_experimental_option("detach", True)

# open browser with options and driver
driver = webdriver.Chrome(options=chrome_options, executable_path=chromedriver)
driver.get(r'https://www.youtube.com/watch?v=dQw4w9WgXcQ')



if __name__ == '__main__':
run()

如果我在没有 chrome 浏览器的情况下运行它,打开它很好,如果不是它崩溃

最佳答案

此错误消息...

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 浏览器 session 因为它已经在使用了。

我能够在本地 中重现该错误框如下:
  • 代码块:
    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/")
  • 完成相关回溯:
    [18516:23156:0204/032227.883:ERROR:cache_util_win.cc(21)] Unable to move the cache: Access is denied. (0x5)
    [18516:23156:0204/032227.898: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
    [18516:23156:0204/032227.898:ERROR:disk_cache.cc(178)] Unable to create cache
    [18516:23156:0204/032227.898:ERROR:shader_disk_cache.cc(605)] Shader Cache Creation failed: -2
    Opening in existing browser session.
    Traceback (most recent call last):
    .
    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 浏览器 session 中打开一个新窗口。

    现有 Chrome 浏览器 session 的快照:

    existing_session

    现有 Chrome 浏览器 session 中的新窗口快照:

    new_window_within_existing_session

    结论

    虽然仍然抛出错误,但新的 Chrome 窗口仍会启动,但仍与已打开的 Chrome session 连接,但新窗口无法由 WebDriver 控制实例。

    解决方案

    你需要注意几件事:
  • 如果您在同一台测试机上使用默认 Chrome 配置文件访问其他工作的网页,则不应设置 user-data-dir 作为 用户数据 因为它仍然被您手动启动的其他 Chrome 进程锁定。
  • 在上述场景中,您需要创建和使用另一个 Chrome 配置文件,您可以在 How to open a Chrome Profile through Python 中找到详细讨论。
  • 如果你在一个独立的测试系统中执行你的测试,你可以设置 user-data-dir 作为 ..\用户数据\默认访问默认 Chrome 配置文件。
  • 在上述场景中,您需要创建和使用另一个 Chrome 配置文件,您可以在 How to use Chrome Profile in Selenium Webdriver Python 3 中找到详细讨论。
  • 但是,根据最佳实践,您必须始终创建一个新的 Chrome 配置文件来执行您的测试,因为默认 Chrome 配置文件可能包含扩展程序、书签、浏览历史记录等,并且可能无法正确加载。
  • 您可以在 How to open a Chrome Profile through --user-data-dir argument of Selenium 中找到详细讨论。
  • 关于python - 无效参数异常 : Message: invalid argument: user data directory is already in use error while initiating Chrome with ChromeDriver Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56585508/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com