Как получить HTML с загруженной страницы с помощью WebKit в Java - PullRequest
0 голосов
/ 04 ноября 2019

Моя цель - использовать Java для анализа страниц списков Airbnb, таких как эта: https://www.airbnb.com/rooms/28149735

Сначала я попытался с помощью JSoup сделать следующее:

String html = Jsoup.connect(webPage).get().html();

Однако это не такработать, так как он не может загрузить сценарии страницы и не отображает то, что я вижу, когда проверяю загруженную страницу из браузера, такого как Chrome или Firefox.

Так что я сейчас пытаюсь использовать WebKit сследующий код:

// get the instance of the webkit
BrowserEngine browser = BrowserFactory.getWebKit();
Page page = browser.navigate("https://www.airbnb.com/rooms/28149735");
page.show();

String html = page.getDocument().getBody().getInnerHTML();

Но это тоже не работает: страница загружается правильно (я вижу это с журналами в консоли, и всплывающее окно отображается правильно), но затем, когда у меня есть загруженная страница,Я не могу получить доступ к html (я получаю исключение нулевого указателя, см. Ниже журнал ошибок).

Когда я запускаю код в режиме отладки, я смотрю на объект страницы, и документ на этой странице показываеткак "ноль", что, кажется, создает ошибку.

Итак, мой вопрос: что я делаю не так и как я могу получить HTML-код загруженной страницы?

Заранее большое спасибо!

PS: Вот ошибка:

Exception in thread "JavaFX Application Thread" io.webfolder.ui4j.api.util.Ui4jException: java.lang.NullPointerException
    at io.webfolder.ui4j.webkit.aspect.WebKitAspect$CallableExecutor.run(WebKitAspect.java:41)
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run$$$capture(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
    at io.webfolder.ui4j.webkit.dom.WebKitDocument.getBody_aroundBody12(WebKitDocument.java:74)
    at io.webfolder.ui4j.webkit.dom.WebKitDocument$AjcClosure13.run(WebKitDocument.java:1)
    at io.webfolder.ui4j.internal.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149)
    at io.webfolder.ui4j.webkit.aspect.WebKitAspect$CallableExecutor.run(WebKitAspect.java:39)
    ... 8 more

1 Ответ

1 голос
/ 05 ноября 2019

Есть ли конкретная причина, по которой вы используете WebKit? Это можно сделать довольно легко в стандартной Java.

URL oracle = new URL("http://www.oracle.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));

String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
    in.close();
}

Выше было взято непосредственно из документации Oracle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...