Проблема с включением JavaScript с помощью HtmlUnit

#java #spring-boot #htmlunit

Вопрос:

Я новичок в HtmlUnit и пишу демонстрационный скрипт для загрузки исходного HTML-кода веб-страницы и записи его в txt-файл.

 public static void main(String[] args) throws IOException {
    try (final WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED)) {
        wc.getOptions().setThrowExceptionOnScriptError(false);
        
        final HtmlPage page = wc.getPage("https://www.sainsburys.co.uk/gol-ui/SearchResults/biscuits");
        WebResponse res = page.getWebResponse();
        String html = res.getContentAsString();
        
        FileWriter fw = new FileWriter(dir   "/pageHtml.txt");
        fw.write(html);
        fw.close();
    }
}
 

Однако он возвращает HTML для отключенного JavaScript. Чтобы попытаться исправить это, я добавил эту строку, чтобы убедиться, что JS включен в веб-клиенте:

         wc.getOptions().setJavaScriptEnabled(true);
 

Несмотря на это, ничего не меняется. Я веду себя как идиот, или есть что-то более тонкое, что нужно изменить?

Спасибо за любую помощь! ^_^

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

1. Что вы получаете? Вы подтверждаете, что ждете асинхронных событий? (Я предлагаю рассматривать Geb как DSL поверх Селена, так как это облегчает сортировку этих вещей.)

2. Привет! Я действительно получаю немного HTML-кода, но, по сути, это обычная HTML-страница, сообщающая мне, что мне нужно включить JavaScript. Я попытался посмотреть, можно ли это воссоздать с помощью другой страницы (на этот раз страница для ASDA — это для проекта uni), и на этот раз это говорит мне, что мой браузер устарел. Вроде как застрял здесь в поисках идей, что делать. Контекст, стоящий за этим, предназначен для веб-очистки для приложения для Android, но Jsoup, я полагаю, не поддерживает JS. Я попробую то решение, которое вы мне предложили!

Ответ №1:

 WebResponse res = page.getWebResponse();
String html = res.getContentAsString();
 

Это ответ (код), который вы получили от сервера. Если вам нравится иметь текущий DOM (тот, который после завершения обработки js, вы можете сделать что-то вроде

 HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(60_000);

System.out.println(page.asXml());
 

или

 System.out.println(page.asNormalizedText());