HTMLUNIT, JAVA - PullRequest
       12

HTMLUNIT, JAVA

0 голосов
/ 13 апреля 2019

Я не могу получить ответ 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 Ответ

0 голосов
/ 14 апреля 2019

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

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

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

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

  1. старая старая кнопка отправки.Кнопки такого типа отправляют некоторую форму на сервер, и вы возвращаетесь на новую страницу.Чтобы работать с этим, вы должны использовать результат метода click, например nextPage = button.click ();

  2. тег кнопки HTML, который делает магию 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();

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

...