温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaFX WebView的采集开发方法是什么

发布时间:2022-01-15 16:33:48 阅读:176 作者:iii 栏目:大数据
Java开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容主要讲解“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元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4221664/blog/4456208

AI

开发者交流群×