Проблема с подходом, когда необходим прокси-сервер с аутентификацией пользователя, а затем запустите приложение на FireFox в ОС Linux - PullRequest
0 голосов
/ 24 сентября 2019

Задача:

Селен с findelements: Попробовал с помощью приведенного ниже кода подключиться и убедиться, что открыт в Firefox, но при получении сообщения об ошибке не удается найти возможности Firefox:

Сведения о настройке прокси в ОС Linux:

  1. IP
  2. ПОРТ
  3. Имя пользователя
  4. Пароль
  5. RequestID
  6. Заголовки: Cookie
  7. Заголовки: «Соединение»: «keep-alive»
  8. Заголовки: пользовательский агент
  9. Заголовок: «Accept-Encoding":" deflate, gzip "
  10. Timeout

Команда Curl работает правильно, как показано ниже:

command = "curl -k -L -v --proxy " + proxyURL + "--connect-timeout 1 -o /tmp/tempcrawl.html '" + appURL
                + "' -H 'accept-encoding:deflate, gzip' -H 'user-agent: " + user_agent
                + "' --compressed";String ProxyURL = http://user:password@ip:port;
HttpClient client = new HttpClient();
HostConfiguration config = client.getHostConfiguration();
config.setProxy(proxyV, Integer.parseInt(port));

Credentials credentials = new UsernamePasswordCredentials(authUser, authPassword);
AuthScope authScope = new AuthScope(proxyV, Integer.parseInt(port));

client.getState().setProxyCredentials(authScope, credentials);
System.out.println("Proxy credentials given");

После того, как настройка прокси вернетсякод, приложение должно быть запущено со всеми вышеуказанными аутентификациями в Firefox Затем найдите элемент для извлечения определенных данных из веб-приложения

firefoxBinary = new FirefoxBinary(new File("/home/cia/firefox/firefox-bin"));

firefoxBinary.addCommandLineOptions("--headless");
firefoxBinary.setTimeout(10);
firefoxOptions.setBinary(firefoxBinary);

if (proxyV != "" || port != "") {
    org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
    proxy.setHttpProxy(PROXY).setFtpProxy(PROXY).setSslProxy(PROXY);
    proxy.setSocksUsername(authUser);
    proxy.setSocksPassword(authPassword);
    firefoxOptions.setProxy(proxy);
}

LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
firefoxOptions.setLogLevel(FirefoxDriverLogLevel.TRACE);
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");

if (s.equalsIgnoreCase("strF")) {
    profile = new FirefoxProfile();
    profile.setPreference("general.useragent.override",
            "Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0");
    profile.setPreference("network.proxy.type", 1);

    String netHttp = "http:// " +authUser + ":" + authPassword + "@" + proxyV + ":" + port;
    profile.setPreference("network.proxy.http", netHttp);
    profile.setPreference("network.proxy.http_port", port);
    profile.setPreference("network.proxy.https", netHttp);
    profile.setPreference("network.proxy.https_port", port);
    profile.setPreference("network.proxy.ssl", netHttp);
    profile.setPreference("network.proxy.ssl_port", port);
    profile.setPreference("network.proxy.ftp", netHttp);
    profile.setPreference("network.proxy.ftp_port", port);
    profile.setPreference("network.proxy.socks", netHttp);
    profile.setPreference("network.proxy.socks_port", port);

    if (user_agent != null) {
        profile.setPreference("general.useragent.override", user_agent);}
    profile.setPreference("app.normandy.user_id", requestId);
    if (proxy_cookie == "") {
        profile.setPreference("network.cookie.cookieBehavior", 0);
        profile.setPreference("network. cookie. alwaysAcceptSessionCookies", true);
    }
    if (proxy_connection == "keep-alive") {
        profile.setPreference("network.tcp.keepalive.enabled", true);
        profile.setPreference("network.http.proxy.keep-alive", true);
        profile.setPreference("network.http.keep-alive", true);
    }
    profile.setPreference("network.http.accept-encoding", proxy_encoding);              profile.setPreference("network.http.connect.timeout", proxy_timeout);
    profile.setPreference("network.http.connection-timeout", proxy_timeout);
    profile.setPreference("network.http.keep-alive.timeout", proxy_timeout);
    dc.setCapability(FirefoxDriver.PROFILE, profile);
    System.out.println("Set profile : ");
}
dc.setCapability(FirefoxOptions.FIREFOX_OPTIONS, firefoxOptions);
dc.setCapability(FirefoxDriver.BINARY, firefoxBinary);
firefoxOptions.merge(dc);

Пробовал с firefoxOptions и даже dc

driver = new FirefoxDriver(firefoxOptions);
driver = new FirefoxDriver(dc);
driver.get(appURL);

Я даже пробовал с HttpClient, HttpGet и setHeaders, но путать с пониманием, видя множественный подход.Здесь я, вероятно, мог бы загрузить HTML, и мне, возможно, потребуется заменить все findElements на DOMParser. Впервые в этом вопросе и не получить никакого решения Сквозной конец на этом

Подходе 1: Как я упоминал выше (HttpClient 4.x для подключения прокси-сервера с аутентификацией пользователя, а затем установить заголовки и необходимые данные для драйвера Firefox и запустить приложение), где я могу использовать свой существующий xpath для поиска элементов и продолжения работы.Подход 2: Используйте HttpClient 4.x, HttpGet (Proxy Authenticate, установите заголовок), загрузите HTML после успешного кода состояния и затем замените FindElement другим подходом (может быть DOM Parser), чтобы найти элементы ....

Пожалуйста, помогите мне с правильной логикой, если не все в порядке ..

...