Chrome Driver 2.36登录问题:线程停滞在Driver.URL(C#)
我来帮你解决Chrome下Windows AD身份验证的自动化卡住问题,结合你的环境信息,咱们一步步来排查和解决:
环境信息
- 操作系统:Windows 10、Server 2012
- 浏览器:Chrome 65.0.3325.181(64位官方版本)
- Web驱动:ChromeDriver 2.36
- .NET框架:4.6
问题回顾
应用采用Windows AD身份验证,在Chrome中打开时会弹出登录弹窗,输入凭据登录后可访问应用,期望自动化实现该流程。但用C#编写的自动化脚本运行时,线程停滞在
Driver.URL处,无法完成登录流程。
解决方案
针对你的场景,有几种可靠的解决方式,你可以根据实际环境选择:
方法1:URL嵌入凭据(适配旧版Chrome)
Chrome 65还支持直接在URL中传入AD凭据,这样能自动跳过登录弹窗,不需要额外处理系统级窗口。代码示例:
string adUsername = "你的AD用户名"; string adPassword = "你的AD密码"; string appBaseUrl = "http://你的应用域名.com"; // 构造带身份验证的URL(去掉原URL的http://前缀,避免格式错误) string authenticatedUrl = $"http://{adUsername}:{adPassword}@{appBaseUrl.Replace("http://", "")}"; // 直接访问拼接后的URL driver.Navigate().GoToUrl(authenticatedUrl);
⚠️ 注意:如果应用是HTTPS协议,Chrome可能会弹出安全提示,测试环境下可以提前配置Chrome忽略该提示,或者结合方法2使用。
方法2:用AutoIt处理系统登录弹窗
AD登录弹窗是Windows系统级窗口,Selenium无法直接控制,这时可以用AutoIt模拟键盘输入完成登录:
- 下载安装AutoIt,编写并编译一个脚本(示例AutoIt代码):
WinWaitActive("Windows Security") ; 等待登录弹窗激活,注意窗口标题要和实际匹配 Send("你的AD用户名{TAB}") ; 输入用户名后按Tab切换到密码框 Send("你的AD密码{ENTER}") ; 输入密码后按回车登录
- 在C#脚本中调用编译好的AutoIt程序:
// 先打开应用URL driver.Navigate().GoToUrl(appBaseUrl); // 等待弹窗加载,再调用AutoIt脚本 System.Diagnostics.Process.Start(@"C:\路径\到\你的AutoIt脚本.exe");
方法3:启用Chrome集成身份验证(免输入凭据)
如果运行脚本的Windows用户本身就有该应用的AD访问权限,可以配置Chrome自动使用当前用户凭据,直接跳过弹窗:
ChromeOptions chromeOptions = new ChromeOptions(); // 白名单你的应用域名,允许自动身份验证 chromeOptions.AddArgument("--auth-server-whitelist=*你的应用域名.com"); chromeOptions.AddArgument("--auth-negotiate-delegate-whitelist=*你的应用域名.com"); chromeOptions.AddArgument("--enable-autologin-in-chrome"); // 初始化带配置的ChromeDriver IWebDriver driver = new ChromeDriver(chromeOptions); // 直接访问应用即可自动登录 driver.Navigate().GoToUrl(appBaseUrl);
额外排查要点
- 版本匹配:你的Chrome 65和ChromeDriver 2.36是兼容的(ChromeDriver 2.36支持Chrome 65-67版本),这部分没问题;
- 等待逻辑:如果弹窗加载有延迟,建议在脚本中添加显式等待,避免操作过早执行;
- 凭据有效性:确认使用的AD用户名和密码确实有权限访问目标应用。
内容的提问来源于stack exchange,提问作者Praveen Kushwaha
相关产品推荐
相关产品推荐

