本篇内容主要讲解“JavaFX WebView的采集开发方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaFX WebView的采集开发方法是什么”吧!
背景
最近想做一个桌面版的客户端,能够加载连接,获取源码等,主要用于快速的获取网站的栏目,便与爬虫该栏目下的最新信息。
采用技术
java 1.8
相关插件介绍
JavaFX是:
•用于创建和交付桌面应用程序的软件平台,以及可以在各种设备上运行的富Internet应用程序(RIA)。•一组图形和媒体包,使开发人员能够设计,创建,测试,调试和部署在不同平台上一致运行的富客户端应用程序。
WebView:
使用WebKit HTML技术的Web组件,可以在JavaFX应用程序中嵌入Web页面。在WebView中运行的JavaScript可以调用Java API,Java API可以调用在WebView中运行的JavaScript。JavaFX中添加了对其他HTML5功能的支持,包括Web套接字,Web Worker和Web字体以及打印功能。
JavaFX WebView:
•JavaFX WebView 是一种迷你浏览器(也称为嵌入式浏览器),它通过JavaFX 应用程序中的API提供Web查看器和完整浏览功能 。•此浏览器基于 WebKit,这是一个支持HTML5,JavaScript,CSS,DOM渲染和SVG图形的开源Web浏览器引擎。•WebView类是Node类的扩展。•嵌入式浏览器从Node类继承所有字段和方法,因此它具有其所有功能。•它封装了WebEngine对象,将HTML内容合并到应用程序的场景中,并提供应用效果和转换的属性和方法。•在WebView对象上调用的getEngine()方法返回与之关联的Web引擎。•构成嵌入式浏览器的类位于javafx.scene.web包中。
•WebView 使开发人员能够在其Java应用程序中实现以下功能:
◦从本地或远程URL呈现HTML内容◦支持历史记录并提供后退和前进导航◦重新加载内容◦将效果应用于Web组件◦编辑HTML内容◦执行JavaScript命令◦执行从JavaScript到JavaFX的上行调用◦处理事件
• 除了支持CSS3和ecmascript6(ES6)之外,WebView组件还支持以下HTML5功能:
◦DOM3◦画布◦媒体播放◦表单控件(<input type =“color”>除外)◦可编辑的内容◦历史维护◦支持<meter>,<progress>,<details>和<summary>标签◦SVG◦Web套接字◦Web Worker◦支持使用本国语言编写的域名
Web引擎:
1.是一个能够一次管理一个网页的非可视对象2.通过其API提供基本网页功能。3.它支持用户交互,例如导航链接和提交HTML表单,但它不直接与用户交互。4.它加载网页,创建文档模型,根据需要应用样式,并在页面上运行JavaScript。5.它提供对当前页面的文档模型的访问,并允许Java应用程序和页面的JavaScript代码之间的双向通信。6.它包装了一个WebPage对象,该对象提供与本机Webkit核心的交互。
主要代码介绍:
主界面构造: package org.lc.v1; import org.lc.v1.component.WebBrowerPane; import org.lc.v1.handle.AlertEventHandler; import org.lc.v1.handle.PopupCallback; import org.lc.v1.html.HtmlChangeListener; import org.lc.v1.html.WebHistoryVisitListener; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Tab; import javafx.scene.web.WebEngine; import javafx.scene.web.WebHistory; import javafx.scene.web.WebView; import javafx.stage.Stage; public class LCWebBrower extends Application {public void start(Stage stage) throws Exception { final WebBrowerPane tp = new WebBrowerPane(stage); stage.setScene(new Scene(tp, 950, 600)); final WebView webView = new WebView(); webView.prefWidthProperty().bind(stage.getScene().widthProperty()); webView.prefHeightProperty().bind(stage.getScene().heightProperty()); final WebEngine webEngine = webView.getEngine(); final WebHistory history = webEngine.getHistory(); history.getEntries().addListener(new WebHistoryVisitListener()); webEngine.getLoadWorker().stateProperty().addListener(new HtmlChangeListener(webEngine)); webEngine.setOnAlert(new AlertEventHandler(tp)); webEngine.setCreatePopupHandler(new PopupCallback(tp)); webEngine.setJavaScriptEnabled(true); webEngine.executeScript("location.reload(true);"); webEngine.load("加载的地址"); final Tab tab = new Tab(); tab.textProperty().bind(webEngine.titleProperty()); tab.setClosable(false); tab.setContent(webView); tp.addTabPage(tab); stage.show();}public static void main(String[] args) { launch(args);}}监听也没加载状态,获取源码、所有连接等。package org.lc.v1.html;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javafx.beans.value.ChangeListener;import javafx.beans.value.ObservableValue;import javafx.concurrent.Worker.State;import javafx.scene.web.WebEngine;public class HtmlChangeListener implements ChangeListener<State> { private WebEngine webEngine; String html; public HtmlChangeListener(WebEngine webEngine) { this.webEngine = webEngine; } public void changed(ObservableValue<? extends State> observable, State oldValue, State newState) { if (newState == State.SUCCEEDED) { html = (String) webEngine.executeScript("document.documentElement.outerHTML"); System.out.print("succeeded"); NodeList elementBody = webEngine.getDocument().getElementsByTagName("a"); for (int i = 0; i < elementBody.getLength(); i++) { Node aTag = elementBody.item(i); String title = ""; if (aTag != null) { title = aTag.getTextContent(); } NamedNodeMap attributes = aTag.getAttributes(); String href = ""; if (attributes != null) { Node hrefObject = attributes.getNamedItem("href"); if (hrefObject != null) href = hrefObject.getTextContent(); } System.out.println(title + " " + href); } }}}
到此,相信大家对“JavaFX WebView的采集开发方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4221664/blog/4456208