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

Вот решение:

<?php
// here's the pattern:
$pattern = '/<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*(\/>|>)/';

// a string to parse:
$string = 'Hello, try clicking <a href="#paragraph">here</a>
    <br/>and check out.<hr />
    <h2>title</h2>
    <a name ="paragraph" rel= "I\'m an anchor"></a>
    Fine, <span title=\'highlight the "punch"\'>thanks<span>.
    <div class = "clear"></div>
    <br>';

// let's get the occurrences:
preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER);

// print the result:
print_r($matches[0]);
?>

Чтобы проверить его глубоко, я ввел в теги автоматического закрытия строки, например:

  1. & lt; hr / & gt;
  2. & lt; br / & gt;
  3. & lt; br & gt;

Я также вводил теги с:

  1. один атрибут
  2. содержит более одного атрибута
  3. , значение которого привязано либо в одинарные кавычки, либо в двойные кавычки
  4. атрибуты, содержащие одинарные кавычки, когда разделитель является двойным цитата и наоборот
  5. «нечеткие» атрибуты с пробелом перед символом «=» после него и до и после него.

Если вы найдете что-то, что не работает в доказательстве концепции выше, я доступен для анализа кода, чтобы улучшить свои навыки.

& lt; EDIT & gt; Я забыл, что вопрос от пользователя заключался в том, чтобы избежать разбора самозакрывающихся тегов. В этом случае шаблон проще, превратившись в это:

$pattern = '/<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*>/';

Пользователь @ridgerunner заметил, что шаблон не позволяет без кавычек атрибутов или атрибутов без значения. В этом случае тонкая настройка приводит к следующему шаблону:

$pattern = '/<(\w+)(\s+(\w+)(\s*\=\s*(\'|"|)(.*?)\\5\s*)?)*\s*>/';

& lt; / EDIT & gt;

Понимание шаблона

Если кто-то заинтересован в обучении подробнее о шаблоне, я предоставляю некоторую строку:

  1. первое подвыражение (\ w +) соответствует имени тега
  2. , второе подвыражение содержит шаблон атрибут. Он состоит из: одного или нескольких пробелов \ s + имя атрибута (\ w +) ноль или более пробелов \ s * (возможно или нет, оставляя здесь пробелы) символ "=" снова, ноль или более пробелов разделитель значения атрибута, одинарная или двойная кавычка («|»). В шаблоне одиночная кавычка экранируется, потому что она совпадает с разделителем строки PHP. Это подвыражение захватывается скобками, поэтому на него можно ссылаться снова для синтаксического анализа закрытия атрибута, поэтому очень важно значение атрибута, сопоставляемое почти : (. *?); в этом конкретном синтаксисе, используя жадное соответствие ( вопросительный знак после звездочки), механизм RegExp позволяет использовать оператор «look-ahead», который соответствует чему-либо, но что следует за этим подвыражением, здесь весело: элемент \ 4 является оператором обратной ссылки, который ссылается на подзадачу, выражение, определенное ранее в шаблоне, в данном случае я имею в виду четвертое подвыражение, которое является первым a ttribute delimiter обнаружен ноль или более пробелов \ s * конец суб-выражения атрибута заканчивается здесь, с указанием нуля или более возможных вхождений, заданных звездочкой.
  3. Затем, поскольку тег может заканчиваться пробелом перед «& gt;», символ, ноль или более пробелов сопоставляются с подшаблоном \ s *.
  4. Тег, который должен соответствовать, может заканчиваться простым «& gt;» символ или возможное закрытие XHTML, которое использует перед ним косую черту: (/> |>). Слэш, конечно, сбежал, поскольку он совпадает с разделителем регулярных выражений.

Небольшой совет: чтобы лучше проанализировать этот код, необходимо посмотреть на исходный код, сгенерированный с тех пор, как я не представил любые специальные символы HTML.

1
задан Chirag Shah 18 January 2019 в 08:51
поделиться

2 ответа

Вы можете создать расширение 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, [ 116], 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.

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

0
ответ дан Recep Duman 18 January 2019 в 08:51
поделиться

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
ответ дан SKYLINE 18 January 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: