我有一个HTTP / HTTPS代理,需要使用用户名和密码进行身份验证。我如何使用C#selenium chrome webdriver做到这一点?
string host = proxies[count].Split(':')[0];
int port = Convert.ToInt32(proxies[count].Split(':')[1]) + 1;
string prox = host + ":" + port.ToString();
OpenQA.Selenium.Proxy proxy = new OpenQA.Selenium.Proxy();
proxy.HttpProxy = prox;
proxy.SslProxy = prox;
options.Proxy = proxy;
选项是我分配给驱动程序的ChromeOptions类。
答案 0 :(得分:1)
我找到的唯一成功方法是使用AutoIT(https://www.autoitscript.com/site/autoit)。
我为所有主流浏览器设置了代理身份验证,但这应该适用于Chrome。 我是通过记忆在手机上写的。如果它没有工作让我知道,我会纠正。
WinWait("data:, - Google Chrome","","10")
If WinExists("data:, - Google Chrome","")Then
WinActivate("data:, - Google Chrome")
Send("USERNAMEGOESHERE"{TAB}")
Send("USERPASSWORDGOESHERE"{ENTER}")
使用AutoIT,将其创建为脚本,将其编译为exe,将其保存在某处并使用以下内容引用该文件(Java代码):
Runtime.getRuntime().exec("C:\\users\\USERID\\desktop\\FILENAME.exe");
我发现在调用触发代理身份验证的URL之前,最好先调用代理脚本。
答案 1 :(得分:0)
这适用于Firefox,但最重要的答案可能会有所帮助。
C# Selenium WebDriver FireFox Profile - using proxy with Authentication
您可以做的是创建配置文件并将身份验证数据保存在其中。如果您的个人资料被称为" webdriver"您可以在初始化中从代码中选择它:
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("WebDriver");
profile.setPreferences("foo.bar",23);
WebDriver driver = new FirefoxDriver(profile);
答案 2 :(得分:0)
答案 3 :(得分:0)
2020更新
我已经在C#的my code on Github中实现了代理身份验证。我尝试了其他多种解决方案,但均无效果。
答案 4 :(得分:0)
如今,Chrome 不允许您使用任何扩展程序进行 selenium 网络测试。而且 selenium 没有任何内置的用于代理的用户名和密码输入。
我找到的唯一解决方案是使用 AutoIt。它将自动执行 Windows 级别的操作。而 selenium 只会自动执行浏览器级别的操作。
将用户名和密码传递给代理对话框是一个 WINDOWS 级别的操作。
要下载和安装 AutoIt,您可以访问:https://www.guru99.com/use-autoit-selenium.html
我写了一个简单的 AutoIt 脚本如下:
; option to read substring in a window title
Opt("WinTitleMatchMode", 2)
; wait for proxy username & password dialog box
WinWait("- Google Chrome","","10")
; if the box shows up, write the username and password
; username & password are passed as program parameters
If WinExists("- Google Chrome","") Then
WinActivate("- Google Chrome")
; $CmdLine is a special array that holds parameters
if $CmdLine[0] = 2 Then
Send($CmdLine[1] & "{TAB}")
Send($CmdLine[2] & "{ENTER}")
EndIf
; any request dialog to save credential?
WinWait("Save password for ","","10")
; if any, close it
If WinExists("Save password for ","") Then
WinActivate("Save password for ")
Send("{TAB}")
Send("{SPACE}")
EndIf
EndIf
Exit
将脚本编译为可执行程序,如ProxyAuth.exe。
程序将接收两个参数:用户名和密码。 通过参数,您可以在 C# 脚本中使用动态用户名和密码。
然后你需要在 C# 代码中使用该程序,如下所示:
ChromeOptions ChromeOptions = new ChromeOptions();
Proxy proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.IsAutoDetect = false;
proxy.SslProxy = $"{ProxyIP}:{ProxyPort}";
proxy.HttpProxy = $"{ProxyIP}:{ProxyPort}";
ChromeOptions.Proxy = proxy;
ChromeOptions.AddArgument("ignore-certificate-errors");
Driver = new ChromeDriver(ChromeOptions);
Driver.Navigate().GoToUrl(Url);
string cmd = string.Format($"{ProxyUsername} {ProxyPassword}");
Process proc = new Process();
proc.StartInfo.FileName = "ProxyAuth.exe";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
您将需要使用 OpenQA.Selenium、OpenQA.Selenium.Chrome 和 System.Diagnostics 命名空间。
** 编辑 **
如果您对使用 AutoIt 感兴趣,也可以在 NuGet 中使用他们的库。只需在“管理 NuGet 包”中搜索:AutoIt。选择显示的唯一一个 AutoIt 包并安装它。
使用此库,您无需如上所述创建 ProxyAuth.exe 应用程序。
您可以使用 AutoIt 库并在 C# 代码中进行修改:
ChromeOptions ChromeOptions = new ChromeOptions();
Proxy proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.IsAutoDetect = false;
proxy.SslProxy = $"{ProxyIP}:{ProxyPort}";
proxy.HttpProxy = $"{ProxyIP}:{ProxyPort}";
ChromeOptions.Proxy = proxy;
ChromeOptions.AddArgument("ignore-certificate-errors");
Driver = new ChromeDriver(ChromeOptions);
Driver.Navigate().GoToUrl(Url);
// use the AutoIt library
AutoItX.AutoItSetOption("WinTitleMatchMode", 2);
AutoItX.WinWaitActive("- Google Chrome", "", 10);
AutoItX.WinActivate("- Google Chrome");
AutoItX.Send(ProxyUsername);
AutoItX.Send("{TAB}");
AutoItX.Send(ProxyPassword);
AutoItX.Send("{ENTER}");
// dismiss save password prompt
AutoItX.WinWaitActive("Save password for ", "", 10);
AutoItX.WinActivate("Save password for ");
AutoItX.Send("{TAB}");
AutoItX.Send("{SPACE}");
答案 5 :(得分:0)
我为您的问题创建了一个小包 (https://github.com/RDavydenko/OpenQA.Selenium.Chrome.ChromeDriverExtensions)
安装包:
Install-Package OpenQA.Selenium.Chrome.ChromeDriverExtensions -Version 1.2.0
用于您的 ChromeOptions
:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Chrome.ChromeDriverExtensions;
...
var options = new ChromeOptions();
// Add your HTTP-Proxy
options.AddHttpProxy(PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASSWORD);
var driver = new ChromeDriver(options); // or new ChromeDriver(AppDomain.CurrentDomain.BaseDirectory, options);
driver.Navigate().GoToUrl("https://whatismyipaddress.com/"); // Check your IP
使用代理的参数代替 PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASSWORD