Модуль HTMLUNIT, JAVA

#java #htmlunit

#java #модуль htmlunit

Вопрос:

Я не могу получить ответ javascript со страницы. СЛЕДУЙТЕ МОЕМУ КОДУ … jquery несовместим?

 WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setJavaScriptEnabled(true);
     webClient.getOptions().setUseInsecureSSL(true);
     webClient.getOptions().setRedirectEnabled(true);
     webClient.getOptions().setTimeout(3000);
     webClient.waitForBackgroundJavaScript(3000);
     webClient.getOptions().setCssEnabled(true);

     HtmlPage page = webClient.getPage("");
         HtmlForm form = (HtmlForm) page.getElementByName("tabview-consultas-publicas:formExtratos");
        HtmlRadioButtonInput radioButton = (HtmlRadioButtonInput) form.getRadioButtonsByName("tabview-consultas-publicas:formExtratos:tipoInformacao").get(0);      
        radioButton.setAttribute("checked","");
        radioButton.setChecked(true);
        HtmlButton button = form.getButtonByName("tabview-consultas-publicas:formExtratos:j_idt156");
        button.click();
        System.out.println(page.asText());
        System.exit(0);
 

Комментарии:

1. Привет, Фредерико, добро пожаловать в Stack Overflow. Можете ли вы описать проблему более подробно?

2. Я просматриваю страницу.jsf на странице у меня есть переключатель выбора и кнопка… при нажатии на кнопку он должен возвращать мне javascript без обновления страницы… однако он ничего не возвращает .. просто текущая страница.

3. Пожалуйста, обновите свой вопрос этим описанием и любой другой информацией, которая, по вашему мнению, поможет нам помочь вам. Желательно использовать MCVE. И … пожалуйста, не КРИЧИТЕ на нас.

Ответ №1:

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

Итак, вот мои грубые предложения:

  • используйте последнюю версию HtmlUnit или, что еще лучше, последнюю сборку snapshot
  • используйте самую последнюю симуляцию браузера (на данный момент FF62)
  • не устанавливайте никаких параметров, если вам не нужно (и не понимаете), что они делают
  • waitForBackgroundJavaScript() не является опцией (как упоминалось здесь несколько раз), вы должны вызвать это после действия

Нет в отношении нажатия кнопки; на сегодняшний день существует более или менее три вида кнопок

  1. старая добрая простая кнопка отправки. Такие кнопки отправляют некоторую форму на сервер, и вы получите новую страницу. Чтобы работать с этим, вы должны использовать результат метода click, например nextPage = button.click();
  2. тег html button, который выполняет некоторую магию javascript с вашей текущей страницей. В этом случае вы можете проигнорировать результат метода click() и продолжить работу со страницей, которая у вас уже есть. Выполнение javascript может быть асинхронным, чтобы справиться с этим, вам нужно вызвать WebClient.waitForBackgroundJavaScript(3000); после вызова click()
  3. фантастическая суперумная обработка действий на основе ajax, выполняемая в наши дни всеми этими js-фреймворками. Обычно это улучшенная версия 2 — разница может заключаться в том, что страница заменяется (перезагружается), запускаемая из javascript. Если произойдет эта перезагрузка, ваш объект страницы (а также результат метода click) укажет на старую страницу. Чтобы справиться с этим делом, вы должны сделать что-то вроде этого
 btn.click();
// wait for the async js
webClient.waitForBackgroundJavaScript(20000);
// get the current page from the window in case it was replaced by some js magic
newPage = (HtmlPage) page.getEnclosingWindow().getTopWindow().getEnclosedPage();
 

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

Комментарии:

1. Спасибо. Я не говорю по-английски, из-за этого мой вопрос был сбит с толку