2016-01-23 3 views
0

Я хочу загрузить веб-контент с сайта URI и использовать селекторы, чтобы получить полезную информацию. Я попробовал JSoup, который позволяет мне select elements with a CSS Selector. К сожалению, Jsoup не работает в качестве браузера и не обрабатывает Javascript, а файлы cookie обрабатывает Cookies. Вот почему я изучил использование JavaFX WebEngine, который работает как браузер. Но класс WebEngine возвращает Documents, которые очень ограничены в вариантах выбора по сравнению с JSoup. Единственные селекторы - Id или по Tag.Селектор содержимого веб-страницы с использованием WebEngine

Есть ли чистый способ использования WebEngine JavaFX с более специализированными возможностями выбора?

Или существуют другие реализации браузера на Java, которые позволяют использовать более специализированные варианты? Реализация должна быть быстрой.

Лучшее решение, которое я могу придумать сейчас является следующее:

  1. Использование WebEngine из JavaFX получить Document объект которого Javascript будет анализироваться.
  2. Преобразование документа к Строка с использованием Transformer.
  3. Передайте эту строку в качестве аргумента в объект JSoup и используйте их CSS возможности выбора.

ответ

2

Jsoup поддержка cookies. Вам просто нужно собрать их и отправить их по каждому запросу. Так что это какая-то работа, но это возможно.

Ваше решение будет работать, но я сомневаюсь, что WebEngine JavaFX - ваш лучший вариант, если ваше приложение не использует JavaFX в любом случае, и вам также нужно отображать веб-контент. Если вам это нужно только для задания, которое вы описали, я бы, конечно, порекомендовал selenium webdriver для этой работы. Благодаря этому вы можете удаленно управлять реальным браузером для доступа ко всему контенту. Есть привязки ко многим стандартным браузерам, в том числе phantomjs, как решение безгласного webkit для максимальной совместимости и HTMLUnit для решения только на Java.

Однако, если скорость вызывает большую озабоченность, я бы попросил Jsoup попробовать. Попытайтесь найти AJAX, который вызывает триггеры Javascript и напрямую получает нужные вам материалы. Это будет намного быстрее, чем селен или WebEngine.

+0

Я не хочу открывать настоящий браузер, мне не нужно отображать какой-либо графический интерфейс. Я просто хочу имитировать браузер с javascript и куки и т. Д. Selenium HTMLUnitDriver близок, но его реализация javascript действительно отсутствует. – Vjeetje

+0

, тогда отправляйтесь с фантомами. Он использует безгласный движок webkit и должен иметь возможность запускать любой реальный JavaScript. Я обнаружил, что лучшее решение в тех случаях, когда я не мог напрямую найти AJAX-вызовы. – luksch

+0

Ow Я не понимал, что в качестве внешней библиотеки есть реализация Java как PhantomJSDriver. Библиотека становится устаревшей, но она точно соответствует той роли, которую я ищу – Vjeetje