HTMLunit Help Script для проверки доступных классов

В контексте использования в языках регулярные выражения действуют на строки, а не на строки. Таким образом, вы должны нормально использовать регулярное выражение, считая, что входная строка имеет несколько строк.

В этом случае заданное регулярное выражение будет соответствовать всей строке, так как «& lt; FooBar & gt;» настоящее. В зависимости от специфики реализации регулярного выражения значение $ 1 (полученное из «(. *)») Будет либо «fghij», либо «abcde\nfghij». Как говорили другие, некоторые реализации позволяют вам контролировать, является ли "." будет соответствовать новой строке, предоставив вам выбор.

Использование регулярных выражений на основе строк обычно используется для командной строки, например egrep.

-1
задан Atharv Rana 16 January 2019 в 09:15
поделиться

1 ответ

Я немного не синхронизирован с веб-программированием, и проникновение в HTMLUnit немного более запутанно, чем я думал.

Если вы хотите автоматизировать веб-страницу в наши дни, вам необходимо общее представление о веб-технологиях, по крайней мере, Html, Javascript и самом HTTP, чтобы понять, что делать.

Давайте начнем с верха - с вашей

прекрасной ошибкой

В качестве отправной точки откройте страницу в реальном браузере и посмотрите на веб приставка. Там вы увидите ту же ошибку; это означает, что на странице, которую вы пытаетесь автоматизировать, есть ошибка (по крайней мере, одна), и ваш браузер просто игнорирует это. HtmlUnit был создан как инструмент тестирования; из-за этого более требовательны к ошибкам. Вы должны отключить это.

webClient.getOptions().setThrowExceptionOnScriptError(false);

Следующий шаг: вы пытаетесь получить доступ к форме на странице

<FORM ACTION="xhwschedule.P_ViewSchedule" METHOD="post">

Поскольку имя метода подразумевает, что getFormByName () может найти формы, имеющие правильный атрибут name - но Ваша форма не имеет.

Следующий шаг:

<INPUT TYPE="radio" NAME="validterm" VALUE="201910" CHECKED>

Поскольку имя метода подразумевает, что 'getElementById ("201910") "может найти элементы, имеющие правильный атрибут id - но у вашего переключателя такого нет. [1113 ]

И то же самое для кнопки. Ниже вы можете найти быстрый взлом, который делает эту работу. Это может помочь прочитать хотя бы страницу HtmlUnit - Начало работы с HtmlUnit . Также доступен Javadoc с подробными описаниями.

Надеюсь, это поможет

public static void main(String[] args) throws IOException {
    String url = "https://mystudentrecord.ucmerced.edu/pls/PROD/xhwschedule.p_selectsubject";

    try (final WebClient webClient = new WebClient()) {
        webClient.getOptions().setThrowExceptionOnScriptError(false);

        HtmlPage page = webClient.getPage(url);
        webClient.waitForBackgroundJavaScript(1000);
        page = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();

        final HtmlForm form =  page.getForms().get(0);
        for (DomElement elem : form.getElementsByTagName("INPUT")) {
            if (elem instanceof HtmlRadioButtonInput) {
                HtmlRadioButtonInput radioButton = (HtmlRadioButtonInput) elem;
                if ("201910".equals(radioButton.getValueAttribute())
                        || "N".equals(radioButton.getValueAttribute())) {
                    radioButton.setChecked(true);
                }
            }
        }

        for (DomElement elem : form.getElementsByTagName("INPUT")) {
            if (elem instanceof HtmlSubmitInput) {
                if ("View Class Schedule".equals(elem.getAttribute("value"))) {
                    elem.click();
                }
            }
        }
        webClient.waitForBackgroundJavaScript(1000);
        page = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();

        System.out.println("----------------");
        System.out.println(page.asXml());
    }
}
0
ответ дан RBRi 16 January 2019 в 09:15
поделиться
Другие вопросы по тегам:

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