Selenium 3.141.59搭配Chrome 78基础认证导航请求取消问题求助
解决Chrome 78 + Selenium 3.141.59中基础认证弹窗消失、导航请求被取消的问题
Chrome 78对基础认证的弹窗触发机制做了调整,这正是导致你升级后流程失效的核心原因。结合你的环境(ChromeDriver 78.0.3904.70 + Selenium 3.141.59),这里有几个实用的解决方案:
方案1:将认证信息直接嵌入URL(最推荐)
这是绕过基础认证弹窗最稳定的方式,Chrome会自动解析URL中的账号密码完成登录,完全不需要依赖弹窗交互。修改你的导航代码如下:
WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addArguments("--start-maximized"); options.addArguments("test-type"); options.addArguments("disable-infobars"); driver = new ChromeDriver(options); // 替换为你的实际认证信息和应用地址 String username = "your-username"; String password = "your-password"; String appUrl = "application url"; // 拼接带认证信息的URL(处理http前缀避免重复) String authenticatedUrl = "http://" + username + ":" + password + "@" + appUrl.replaceFirst("^http://", ""); driver.navigate().to(authenticatedUrl);
方案2:通过Chrome命令行参数强制触发认证弹窗
如果嵌入URL的方式不符合你的需求,可以尝试添加认证白名单参数,让Chrome强制弹出认证窗口,再通过Selenium的Alert类处理:
WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addArguments("--start-maximized"); options.addArguments("test-type"); options.addArguments("disable-infobars"); // 替换为你的应用域名,确保浏览器识别需要认证的站点 options.addArguments("--auth-server-whitelist=*.your-app-domain.com"); options.addArguments("--auth-negotiate-delegate-whitelist=*.your-app-domain.com"); driver = new ChromeDriver(options); driver.navigate().to("application url"); // 捕获并处理认证弹窗 try { Alert authAlert = driver.switchTo().alert(); authAlert.sendKeys(username + Keys.TAB + password); authAlert.accept(); } catch (NoAlertPresentException e) { // 弹窗未出现时的容错处理 e.printStackTrace(); }
方案3:临时降级Chrome版本(应急方案)
如果上述方案都无法快速生效,你可以暂时降级回Chrome 76版本,搭配对应的ChromeDriver(76.0.3809.126),这样就能恢复到之前正常的工作流程,同时慢慢排查新版本的适配问题。
额外注意事项
- 务必保证ChromeDriver版本和Chrome浏览器版本完全匹配,这是Selenium+Chrome组合稳定运行的核心前提;
- 部分环境下,URL嵌入认证信息可能会被浏览器安全策略拦截,此时可以检查Chrome的安全设置,或者切换到方案2。
内容的提问来源于stack exchange,提问作者Ajay Polsani




