C # Selenium Firefox Set socks прокси с аутентификацией - PullRequest
0 голосов
/ 28 октября 2019

В C # я пытаюсь установить прокси-носки с аутентификацией в firefox.

Это не работает

    Proxy proxy = new Proxy();
    proxy.SocksProxy = sProxyIP + ":" + sProxyPort;
    proxy.SocksUserName = sProxyUser;
    proxy.SocksPassword = sProxyPass;
    options.Proxy = proxy;
    _driver = new FirefoxDriver(service, options);

Это тоже не работает

   profile.SetPreference("network.proxy.socks", sProxyUser + ":" + sProxyPass + "@" + sProxyIP + ":" + sProxyPort);
   profile.SetPreference("network.proxy.socks_port", sProxyPort);

Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

После долгих исследований вот решение, с которым я решил пойти.

Это грязный хак, но он работает.

Я использовал AutoitX для автоматизацииокно авторизации прокси, но для получения правильного окна аутентификации пришлось использовать System.Windows.Automation, поскольку мое приложение будет многопоточным.

sProxyIP = "154.5.5.5";
sProxyUser = "user here";
sProxyPass = "pass here";
sProxyPort = 4444;

//Set proxy
profile.SetPreference("network.proxy.socks", sProxyIP);
profile.SetPreference("network.proxy.socks_port", sProxyPort);


//deal with proxy auth
_driver.Manage().Timeouts().PageLoad = TimeSpan.FromMilliseconds(0);
WebsiteOpen(@"https://somewebsite.com/");
AuthInProxyWindow(sProxyUser, sProxyPass);
_driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(60);



void ProxyAuthWindow(string login, string pass)
{
    try
    {   
        //wait for the auth window
        var sHwnd = AutoItX.WinWait("Authentication Required", "", 2);
        AutoItX.WinSetOnTop("Authentication Required", "", 1);

        //we are using Windows UIA so we make sure we got the right auth
         //dialog(since there will be multiple threads we can easily hit the wrong one)
        var proxyWindow = AutomationElement.RootElement.FindFirst(TreeScope.Subtree,
            new PropertyCondition(AutomationElement.ClassNameProperty, "MozillaDialogClass"));
        string hwnd = "[handle:" + proxyWindow.Current.NativeWindowHandle.ToString("X") + "]";
        AutoItX.ControlSend(hwnd, "", "", login, 1);
        AutoItX.ControlSend(hwnd, "", "", "{TAB}", 0);
        AutoItX.ControlSend(hwnd, "", "", pass, 1);
        AutoItX.ControlSend(hwnd, "", "", "{ENTER}", 0);
    }
    catch
    {

    }


}
0 голосов
/ 06 ноября 2019

Насколько я знаю, вы не можете сделать это таким образом с Firefox. Вам нужно добавить новый профиль Firefox и затем работать с ним с Selenium. В этом профиле вам нужно сохранить информацию о прокси и сохранить имя пользователя и пароль.

Вы можете установить профиль Firefox, выполнив следующие действия ссылка . Тогда это легко сделать работу. Я использую этот код:

FirefoxProfile profile = new FirefoxProfile(pathToProfile);
FirefoxOptions options = new FirefoxOptions();
options.Profile = profile;
driver = new FirefoxDriver(options);

Тогда вам придется отключить предупреждение для проверки имени пользователя и пароля. Вы можете использовать два способа сделать это. Первый - это сделать программно. Примерно так:

 var alert = driver.SwitchTo().Alert();
 alert.Accept();

Другой способ - это сделать из настроек профиля Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...