温馨提示×

温馨提示×

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

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

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

发布时间:2022-01-15 16:33:48 来源:亿速云 阅读:150 作者:iii 栏目:大数据

本篇内容主要讲解“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的采集开发方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

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

AI