#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());