如何使用Selenium Webdriver(C#)处理Chrome浏览器认证?

3
我正在使用C#和Selenium Web Driver编写Chrome浏览器的自动化脚本。在一个浏览器中打开多个标签页的情况下,我遇到了困难,需要导航到浏览器的第一个标签,并重新输入登录凭据来进行身份验证。
请查看以下授权窗口的截图: enter image description here 我无法导航到第一个标签,并且无法通过用户名和密码进行身份验证。我在Stackoverflow上找到了一些答案,并在我的脚本中尝试了一些方法,但没有得到正确的结果。以下是我的示例代码:
WebDriverWait wait = new WebDriverWait(driver, 10);
IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());
alert.SetAuthenticationCredentials(username, pwd);

执行上述代码后,出现以下错误:

WebDriverWait的某些参数无效。 参数'2':无法将'int'转换为'System.TimeSpan'

对于Chrome浏览器是否有特定的代码?我正在使用Visual Studio 2008。

正如我所提到的,我在Stackoverflow上搜索了一些线程,但它们在我的脚本中没有起作用。因此,标记为重复没有意义。 - Ashish Sharma
请参见:我该如何做X? 在SO上,提问者的期望不仅是研究自己的问题以回答问题,还要分享研究成果、代码尝试和结果。这表明您已经花时间尝试帮助自己,它可以避免我们重复显而易见的答案,最重要的是它可以帮助您获得更具体和相关的答案!另请参见:[提问] - JeffC
你提到了它,但是你没有提供任何细节。在你进行一些研究并实际提供细节以证明其他地方提供的解决方案在这里不起作用并且结果如何之前,它还没有被证明不是重复的。 - JeffC
1
可能是Selenium-除了通过URL进行基本身份验证之外的其他方式的重复问题。 - undetected Selenium
4个回答

4

试着通过以下方式获取URL...

driver.get("http://username:password@www.domain.com");

使用Alert类,像这篇帖子(如何在Java中使用Selenium WebDriver处理身份验证弹出窗口)所述的那样,显然只适用于IE浏览器。

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());
        alert.SetAuthenticationCredentials("username", "password")

嗨Cavan,谢谢你的回复。我尝试了你的代码行,但是它给了我一个错误。 WebDriverWait wait = new WebDriverWait(driver, 10); IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent()); alert.SetAuthenticationCredentials(UserLogin.username, UserLogin.pwd); - 错误“参数'2':无法从'int'转换为'System.TimeSpan'”。是否有适用于Chrome浏览器的特定代码? - Ashish Sharma
我已将代码更新为C#。之前是Java,语法略有不同。 - Cavan Page
谢谢Cavan,我尝试使用driver.Navigate().GoToUrl("http://username:password@www.domain.com")和一些技巧,现在我能够处理身份验证弹窗了。 - Ashish Sharma

0

感谢@smith9234的回复。我尝试了driver.Navigate().GoToUrl("username:password@www.domain.com")并使用一些技巧成功处理了身份验证对话框。 - Ashish Sharma

0

0

这里有一个简单的方法来解决这个问题:

baseUrl = "http://" + username + ":" + password + "@" + url;
driver.get(baseUrl + "/");

使用上述代码,我们在URL中提供凭据,在运行脚本时,这将成功地绕过验证窗口。

请参考以下代码,了解在浏览器启动后如何执行此操作:

WebDriver driver = new FirefoxDriver();
String baseUrl = "http://" + "USERNAME" + ":" + "PASSWORD" + "@" + "xyz.com";
driver.get(baseUrl + "/");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接