如何从JavaFXWebView解析html并将此数据传输到Jsoup文档?

如何从JavaFXWebView解析html并将此数据传输到Jsoup文档?,html,javafx,jsoup,Html,Javafx,Jsoup,我试图解析一些文档站点的侧栏TOC(组件表) Jsoup 我试过Jsoup。我无法获取TOC元素,因为此标记中的HTML内容不是初始HTML的一部分,而是在加载页面后由JavaScript设置的 你可以在这里看到我前面的问题: 建议的解决方案是检查从浏览器开发工具菜单手动建立的连接,找到网站的最新版本。解析某些文档站点的侧栏TOC只是我的java程序的一个组件,所以我无法手动完成 JavaFX网络视图(非Android网络视图) 我尝试过JavaFXWebView,因为我需要一个执行javasc

我试图解析一些文档站点的侧栏TOC(组件表)

Jsoup

我试过Jsoup。我无法获取TOC元素,因为此标记中的HTML内容不是初始HTML的一部分,而是在加载页面后由JavaScript设置的

你可以在这里看到我前面的问题:

建议的解决方案是检查从浏览器开发工具菜单手动建立的连接,找到网站的最新版本。解析某些文档站点的侧栏TOC只是我的java程序的一个组件,所以我无法手动完成

JavaFX网络视图(非Android网络视图)

我尝试过JavaFXWebView,因为我需要一个执行javascript代码并填充Toc标记组件的浏览器

WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.load("https://docs.microsoft.com/en-us/ef/ef6/");
但我不知道如何检索加载的网站的HTML代码并将这些数据传输到Jsoup文档?
感谢您的建议。

我不能保证这是最好的方法,因为我以前没有使用过Jsoup,而且我不是XML API方面的专家

org.jsoup.jsoup
类有一个解析
String
表单中HTML的方法:。这意味着我们需要从
WebView
字符串的形式获取HTML。
WebEngine
类有一个包含
org.w3c.dom.Document
的类。此
文档
是当前显示网页的HTML内容。我们只需要将这个
文档
转换成
字符串
,我们可以使用
转换器

import java.io.StringWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.jsoup.Jsoup;

public class Utils {

  private static Transformer transformer;

  // not thread safe
  public static org.jsoup.nodes.Document convert(org.w3c.dom.Document doc)
      throws TransformerException {
    if (transformer == null) {
      transformer = TransformerFactory.newDefaultInstance().newTransformer();
    }

    StringWriter writer = new StringWriter();
    transformer.transform(new DOMSource(doc), new StreamResult(writer));
    return Jsoup.parse(writer.toString());
  }

}
每次
文档
属性更改时,都会调用此函数。我通过浏览Google并将
org.jsoup.nodes.Document
打印到控制台进行了一些“测试”,一切似乎都正常


不过有一个警告;据我所知,
文档
属性在同一网页内发生更改时不会更改(但是,
文档
本身可能会更新)。我不是一个网络人,所以请原谅我,如果我在这里没有意义,但我相信,这包括一些事情,如改变其内容的框架。也许有一种方法可以解决这个问题,那就是使用JavaScript接口,但我不知道怎么做。

我不能保证这是最好的方法,因为我以前没有使用过Jsoup,而且我不是XML API方面的专家

    WebView browser = new WebView();
    WebEngine webEngine = browser.getEngine();
    String url = "https://docs.microsoft.com/en-us/ef/ef6/";
    webEngine.load(url);
    //get w3c document from webEngine
    org.w3c.dom.Document w3cDocument = webEngine.getDocument();
    // use jsoup helper methods to convert it to string
    String html =  new org.jsoup.helper.W3CDom().asString(webEngine.get);
    // create jsoup document by parsing html
    Document doc = Jsoup.parse(url, html);
org.jsoup.jsoup
类有一个解析
String
表单中HTML的方法:。这意味着我们需要从
WebView
字符串的形式获取HTML。
WebEngine
类有一个包含
org.w3c.dom.Document
的类。此
文档
是当前显示网页的HTML内容。我们只需要将这个
文档
转换成
字符串
,我们可以使用
转换器

import java.io.StringWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.jsoup.Jsoup;

public class Utils {

  private static Transformer transformer;

  // not thread safe
  public static org.jsoup.nodes.Document convert(org.w3c.dom.Document doc)
      throws TransformerException {
    if (transformer == null) {
      transformer = TransformerFactory.newDefaultInstance().newTransformer();
    }

    StringWriter writer = new StringWriter();
    transformer.transform(new DOMSource(doc), new StreamResult(writer));
    return Jsoup.parse(writer.toString());
  }

}
每次
文档
属性更改时,都会调用此函数。我通过浏览Google并将
org.jsoup.nodes.Document
打印到控制台进行了一些“测试”,一切似乎都正常


不过有一个警告;据我所知,
文档
属性在同一网页内发生更改时不会更改(但是,
文档
本身可能会更新)。我不是一个网络人,所以请原谅我,如果我在这里没有意义,但我相信,这包括一些事情,如改变其内容的框架。有一种方法可以解决这个问题,就是使用与JavaScript接口,但我不知道如何实现。

我认为应该有一个
toString()
方法。我认为应该有一个
toString()
方法。
    WebView browser = new WebView();
    WebEngine webEngine = browser.getEngine();
    String url = "https://docs.microsoft.com/en-us/ef/ef6/";
    webEngine.load(url);
    //get w3c document from webEngine
    org.w3c.dom.Document w3cDocument = webEngine.getDocument();
    // use jsoup helper methods to convert it to string
    String html =  new org.jsoup.helper.W3CDom().asString(webEngine.get);
    // create jsoup document by parsing html
    Document doc = Jsoup.parse(url, html);