Задача:
Селен с findelements: Попробовал с помощью приведенного ниже кода подключиться и убедиться, что открыт в Firefox, но при получении сообщения об ошибке не удается найти возможности Firefox:
Сведения о настройке прокси в ОС Linux:
- IP
- ПОРТ
- Имя пользователя
- Пароль
- RequestID
- Заголовки: Cookie
- Заголовки: «Соединение»: «keep-alive»
- Заголовки: пользовательский агент
- Заголовок: «Accept-Encoding":" deflate, gzip "
- 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), чтобы найти элементы ....
Пожалуйста, помогите мне с правильной логикой, если не все в порядке ..