C#中ChromeDriver构造函数因特定配置文件Chrome实例存在而挂起
2018年ChromeDriver复用用户目录超时属于正常现象吗?
答案是肯定的——在2018年,这种情况完全是正常的预期行为。
为什么会这样?原理其实很直白:Chrome的用户数据目录(也就是你代码里指定的user-data-dir)是单实例独占的资源。当你用这个配置启动第一个ChromeDriver时,Chrome会锁定这个目录,防止其他实例篡改数据。第二个实例尝试访问同一个目录时,会因为拿不到锁而一直等待,直到触发60秒的超时限制,这在当时的ChromeDriver版本里是标准表现。
而且2018年的ChromeDriver(对应当时的Chrome浏览器版本)还没有优化这类场景的错误提示,不像现在可能会直接抛出“目录已被占用”的明确错误,当时就是默默等待超时,所以你遇到的情况完全符合当时的产品逻辑。
顺便提一句当时常见的解决思路,供参考:
- 要同时启动多个Chrome实例,必须给每个实例分配独立的用户数据目录,比如给每个实例创建一个子文件夹(比如
profile1、profile2),不能共用同一个目录; - 或者在启动第二个实例前,确保第一个
ChromeDriver已经完全退出,释放掉目录锁。
你提供的复现代码如下:
var co = new ChromeOptions(); var dir = Path.Combine(Environment.CurrentDirectory, "profile"); co.AddArgument($"user-data-dir={dir}"); var driver = new ChromeDriver(co); var driver2 = new ChromeDriver(co); // <-- 此处会在60秒后超时
内容的提问来源于stack exchange,提问作者Dizzy
相关产品推荐
相关产品推荐

