Как обработать предупреждение аутентификации браузера с помощью селенового вебдрайвера, используя java без метода autoit и url - PullRequest
0 голосов
/ 17 января 2019

Я пытался установить прокси с

Proxy proxy = new Proxy();
proxy.setHttpProxy("http://MY_USERNAME:MY_PASSWORD@MY_HOST:MY_PORT");

Он перенаправляет на определенный URL, но на самом деле он не устанавливает прокси и дает мне локальный IP вместо MY_HOST.

Я не могу использовать скрипт autoit.

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

введите описание изображения здесь

Я пытался с driver.switchTo().alert(); но, код не работает после утверждения driver.get(MY_URL); когда появится всплывающее окно.

Примечание : обе опции (1) по заданному файлу crx и (2) путем предоставления имени пользователя и пароля в URL с хостом и портом, проходят аутентификацию успешно, но обратите внимание, что это не так на самом деле установить прокси как требуется, но вместо этого он дает локальный IP

Ответы [ 2 ]

0 голосов
/ 18 января 2019

java.awt.Robot класс может использоваться для аутентификации

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;

login() throws Exception {
    // Pass username
    autoType(username);
    // to move to Password field
    autoTab();
    // Enter Password
    autoType(password);
    // To click on login
    autoSubmit();
}

private static void autoType(String string) throws AWTException {
    Robot robot = new Robot();
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    StringSelection stringSelection = new StringSelection(string);
    clipboard.setContents(stringSelection, null);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
}

private static void autoTab() throws AWTException {
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);
}

private static void autoSubmit() throws AWTException {
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
}
0 голосов
/ 17 января 2019

Вы можете создать расширение Chrome, которое может обрабатывать прокси на лету. ChromeDriver не предоставляет никаких возможностей для обработки HTTP-прокси, который требует учетных данных.

Создайте zip-файл proxyExtension.zip, содержащий следующие 2 файла;

background.js

var config = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: "YOU_PROXY_ADDRESS",
        port: parseInt(YOUR_PROXY_PORT)
      },
      bypassList: ["foobar.com"]
    }
  };

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

function callbackFn(details) {
    return {
        authCredentials: {
            username: "YOUR_PROXY_USERNAME",
            password: "YOUR_PROXY_PASSWORD"
        }
    };
}

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

YOU_PROXY_ADDRESS, YOUR_PROXY_PORT, YOUR_PROXY_USERNAME, YOUR_PROXY_PASSWORD поля будут заменены вашими данными.

manifest.json

{
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Chrome Proxy",
    "permissions": [
        "proxy",
        "tabs",
        "unlimitedStorage",
        "storage",
        "<all_urls>",
        "webRequest",
        "webRequestBlocking"
    ],
    "background": {
        "scripts": ["background.js"]
    },
    "minimum_chrome_version":"22.0.0"
}

Затем инициализируйте веб-драйвер с помощью следующего кода:

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addExtensions(new File("path_to_extension_file/proxyExtension.zip"));
WebDriver driver = new ChromeDriver(chromeOptions);

Пожалуйста, измените path_to_extension_file на каталог, в котором есть файл proxyExtension.zip.

Более подробную информацию вы также можете найти по ссылке .

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