Функция onclick HtmlUnit с отключенным JavaScript

#javascript #html #onclick #htmlunit

#javascript #HTML #onclick #htmlunit

Вопрос:

У меня возникли проблемы с доступом к сайту с помощью HtmlUnit. Сайт возвращает ошибки и время ожидания сайта, когда я использую «webclient.getPage (URL)» с включенным JavaScript, но когда я отключаю JavaScript, я могу получить страницу. Проблема возникает, когда я пытаюсь перейти со страницы на страницу, вся навигация выполняется на сайте в виде методов JavaScript в атрибуте ‘onclick’ тегов HTML.

У меня отключен JavaScript при получении страницы (originalPage), но я включаю его после получения страницы и при попытке выполнить метод JavaScript в атрибуте ‘onclick’. Метод JavaScript находится в теге script в ‘originalPage’.

 originalPage = webClient.getPage(url);

webclient.setjavascriptenabled(true)

javaScriptCode = "javascript:getNextPage();";
scriptResult = originalPage.executeJavaScript(javaScriptCode);
nextPage = scriptResult.getNewPage();
  

Мой код не возвращает следующую страницу, а вместо этого возвращает ту же страницу, что и ‘originalPage’. Возможно ли, что из-за того, что я получил ‘originalPage’, когда JavaScript был отключен, он не будет работать? Есть ли способ, который я могу выбрать, когда файлы JS загружаются при вызове getPage()?

(Я проверил, что метод JavaScript работает в браузере)

Ответ №1:

Возможно ли, что из-за того, что я получил ‘originalPage’, когда JavaScript был отключен, он не будет работать?

Абсолютно.

Есть ли способ, который я могу выбрать, когда файлы JS загружаются при вызове getPage()?

Это возможно, но вам придется реализовать свой собственный WebConnection и проанализировать текст HTML, прежде чем он будет обработан HtmlUnit. Определенно не смешная задача. Кроме того, если бы вы в конечном итоге анализировали HTML как текст, тогда не было бы никакой необходимости в HtmlUnit, верно?

Другим подходом было бы преобразовать код JS, который вы хотите выполнить, в HTTP-запросы и запускать их вручную с помощью WebRequests . В качестве альтернативы, и если вы не возражаете против использования решения, не связанного с Java, используйте PhantomJS, который имеет лучшую поддержку JS.

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

1. Есть ли способ заставить мой метод JavaScript работать без необходимости ссылаться на исходную страницу? Как консоль в веб-браузере?

2. Вы должны выполнить JS на странице