C # Selenium WebDriver FireFox Profile - использование прокси с аутентификацией

Когда вы устанавливаете параметр прокси-сервера в приведенном ниже коде, если ваш прокси-сервер требует аутентификации, FireFox откроет диалоговое окно аутентификации, и в основном вы не можете заполнить его автоматически. Так есть ли способ установить ИМЯ ПОЛЬЗОВАТЕЛЯ и ПАРОЛЬ?

FirefoxProfile profile = new FirefoxProfile();
String PROXY = "192.168.1.100:8080";
OpenQA.Selenium.Proxy proxy = new OpenQA.Selenium.Proxy();
proxy.HttpProxy=PROXY;
proxy.FtpProxy=PROXY;
proxy.SslProxy=PROXY;
profile.SetProxyPreferences(proxy);
FirefoxDriver driver = new FirefoxDriver(profile);

Если вы попытаетесь отформатировать строку прокси в нечто подобное http://username:[email protected]:8080, вы получите ошибку, что строка недействительна. Поэтому мне интересно, что должен быть способ добиться этого.

Любая помощь будет оценена.


person Tim    schedule 29.08.2012    source источник
comment
Я еще не нашел ответа на этот вопрос, на данный момент я просто отключил аутентификацию на своем прокси-сервере и разрешил ее по диапазону IP-адресов, так что на данный момент это работает.   -  person Tim    schedule 29.12.2012
comment
какая ссылка мне нужна для ProfilesIni получения ошибки The type or namespace name 'ProfilesIni' could not be found   -  person Nick Kahn    schedule 23.11.2013


Ответы (4)


Что вы можете сделать, так это создать профиль и сохранить в нем данные аутентификации. Если ваш профиль называется «webdriver», вы можете выбрать его в своем коде при инициализации:

ProfilesIni allProfiles = new ProfilesIni(); 
FirefoxProfile profile = allProfiles.getProfile("WebDriver"); 
profile.setPreferences("foo.bar",23);
WebDriver driver = new FirefoxDriver(profile);
person Santiago Hernandez    schedule 12.01.2013
comment
Это очень интересно, я должен попытаться сообщить, если это сработает. - person Tim; 12.01.2013
comment
Здорово! Пожалуйста, держите меня в курсе :) - person Santiago Hernandez; 13.01.2013

Вы можете написать собственное расширение Firefox для прокси и запускать его из селена. Вам нужно записать 2 файла и упаковать.

background.js

var proxy_host = "YOUR_PROXY_HOST";
var proxy_port = YOUR_PROXY_PORT;

var config = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: proxy_host,
        port: proxy_port
      },
      bypassList: []
    }
 };


function proxyRequest(request_data) {
    return {
        type: "http",
        host: proxy_host, 
        port: proxy_port
    };
}

browser.proxy.settings.set({value: config, scope: "regular"}, function() {;});

function callbackFn(details) {
return {
    authCredentials: {
        username: "YOUR_USERNAME",
        password: "YOUR_PASSWORD"
    }
};
}

browser.webRequest.onAuthRequired.addListener(
        callbackFn,
        {urls: ["<all_urls>"]},
        ['blocking']
);

browser.proxy.onRequest.addListener(proxyRequest, {urls: ["<all_urls>"]});

manifest.json

{
  "name": "My Firefox Proxy",
  "version": "1.0.0b",
  "manifest_version": 2,
  "permissions": [
    "browsingData",
    "proxy",
    "storage",
    "tabs",
    "webRequest",
    "webRequestBlocking",
    "downloads",
    "notifications",
    "<all_urls>"
  ],
  "background": {
    "scripts": ["background.js"]
  },
  "browser_specific_settings": {
    "gecko": {
      "id": "[email protected]"
    }
  }
}

Затем вам нужно упаковать эти файлы в zip-архив в режиме DEFLATED с .xpi в конце, например, my_proxy_extension.xpi.

У вас есть два варианта:

  1. Подпишите свое расширение Здесь вы можете прочитать больше о проверке расширения и его структуры

    ИЛИ

  2. Выполнить без знака. Для этого шага:

    • Open firefox flags at about:config and set options xpinstall.signatures.required to false

    ИЛИ

    • Обновите профиль Firefox в:

      Windows: C: \ Program Files \ Mozilla Firefox \ defaults \ pref \ channel-prefs.js.

      Linux: /etc/firefox/syspref.js

    Добавьте следующую строку в конец файла:

    pref ("xpinstall.signatures.required", false);

После этого запустите селен и установите это расширение:

FirefoxProfile profile = new FirefoxProfile();

profile.addExtension(new File("path/to/my_proxy_extension.xpi"));

driver = new FirefoxDriver(profile);
person Feuermann    schedule 15.05.2020

Сделал это с помощью MS UI Automation без AutoIt:

public void AuthInProxyWindow (string login, string pass)
    {
        var proxyWindow = AutomationElement.RootElement
            .FindFirst(TreeScope.Subtree,
                new PropertyCondition(AutomationElement.ClassNameProperty, "MozillaDialogClass"));

        var edits = proxyWindow.FindAll(TreeScope.Subtree,
            new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));

        var unamePoint = edits[1].GetClickablePoint();
        Mouse.MoveTo(new Point((int) unamePoint.X, (int) unamePoint.Y));
        Mouse.Click(MouseButton.Left);

        SendKeys.SendWait(login);
        var pwdPoint = edits[2].GetClickablePoint();
        Mouse.MoveTo(new Point((int) pwdPoint.X, (int) pwdPoint.Y));
        Mouse.Click(MouseButton.Left);
        SendKeys.SendWait(pass);

        Keyboard.Press(Key.Return);
        Logger.Debug("Authefication in Firefox completed succesfully");
    }

Мышь перемещается с помощью Microsoft.TestApi

person unickq    schedule 12.12.2015

Чтобы Firefox не выдавал вам всплывающее окно авторизации, просто убедитесь, что вы установили URL-адрес прокси, чтобы включить детали авторизации на этапе настройки, как показано ниже:

var myProxy = user + ":" + pass + "@" + proxyIP + ":" + proxyPORT;
options.SetPreference("network.proxy.type", 1);
options.SetPreference("network.proxy.http", myProxy);
options.SetPreference("network.proxy.http_port", proxyPORT);
options.SetPreference("general.useragent.override", useragent);
driver = new FirefoxDriver(driverService, options);
person scott    schedule 05.01.2019