Python读取凭据管理器凭据报错:元素未找到但凭据已存在
解决win32cred.CredRead报"Element not found"错误的问题
调用win32cred.CredRead读取已存在的凭据时返回"元素未找到"错误,结合你提供的凭据信息,问题核心在于凭据类型不匹配或目标名称格式不符,以下是具体解决方法:
1. 修正凭据类型参数
你截图中的凭据属于Windows"普通凭据",对应的win32cred类型常量是win32cred.CRED_TYPE_DOMAIN_PASSWORD(类型值为1),而你代码中使用的CRED_TYPE_GENERIC(类型值为2)对应"通用凭据",类型不匹配会导致无法定位目标凭据。修改代码如下:
import win32cred target_name = "rtp-abs-cache.com" # 替换为匹配的凭据类型 credential = win32cred.CredRead(target_name, win32cred.CRED_TYPE_DOMAIN_PASSWORD)
2. 验证目标名称的精确值
如果修改类型后仍报错,可能是存储的目标名称带有前缀(比如https://rtp-abs-cache.com),可以通过遍历所有凭据确认精确值:
import win32cred # 枚举所有凭据 cred_list = win32cred.CredEnumerate(None, 0) for cred in cred_list: print(f"目标名称: {cred['TargetName']}, 凭据类型: {cred['Type']}")
运行后找到与你截图中一致的条目,用它的TargetName和Type值替换CredRead的参数即可。
补充:Windows凭据类型对应关系
Windows凭据管理器中不同类型凭据与win32cred常量的对应关系:
- 普通凭据:
CRED_TYPE_DOMAIN_PASSWORD(1) - 通用凭据:
CRED_TYPE_GENERIC(2) - 证书凭据:
CRED_TYPE_DOMAIN_CERTIFICATE(3)
内容的提问来源于stack exchange,提问作者Akshay J
相关产品推荐
相关产品推荐

