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