我想要我的答案,因为我想我已经解决了。此答案不需要通过 URL 传递凭据(对于那些无法喜欢我的人)。它也不需要安装或包含在解决方案中或安装到浏览器上的任何自定义 Firefox 配置文件或扩展,从而消除了跨机器兼容性问题。
我的问题是无法通过通过 URL 传递凭据来完成身份验证,因为登录位于代理后面。
所以,我转向 Windows 自动化工具包并找到了 AutoIT。使用 AutoIT 和 Selenium,您可以通过将用户名和密码发送到出现的 Windows 对话框来自动登录。方法如下(注意以下步骤适用于 c#:
1 - 从http://www.autoitscript.com/site/autoit/downloads/下载 AutoIT
2 - 将 autoit .dll 添加到您的项目引用中。
右键单击引用,选择添加引用。接下来单击浏览按钮并浏览到 dll 位置(大多数默认安装将是 c:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dll),然后添加到项目中。
3 - 像这样使用 AutoIT 和 Selenium(假设您的 Web 驱动程序已经初始化):
//Initialize AutoIT
var AutoIT = new AutoItX3();
//Set Selenium page load timeout to 2 seconds so it doesn't wait forever
Driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
//Ingore the error
try
{
Driver.Url = url;
}
catch
{
return;
}
//Wait for the authentication window to appear, then send username and password
AutoIT.WinWait("Authentication Required");
AutoIT.WinActivate("Authentication Required");
AutoIT.Send("username");
AutoIT.Send("{TAB}");
AutoIt.Send("password");
AutoIT.Send("{ENTER}");
//Return Selenium page timeout to infinity again
Driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(-1));
无论如何,就是这样,它就像一个魅力:)
另请注意,有些特殊字符需要在 AutoIT 中使用序列“{x}”进行转义。例如,如果您的密码是“!tRocks”,则需要将其作为“{!}tRocks”传递给 AutoIT。
快乐的自动化。