您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“JavaFX WebView的采集開發(fā)方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“JavaFX WebView的采集開發(fā)方法是什么”吧!
背景
最近想做一個(gè)桌面版的客戶端,能夠加載連接,獲取源碼等,主要用于快速的獲取網(wǎng)站的欄目,便與爬蟲該欄目下的最新信息。
采用技術(shù)
java 1.8
相關(guān)插件介紹
JavaFX是:
?用于創(chuàng)建和交付桌面應(yīng)用程序的軟件平臺,以及可以在各種設(shè)備上運(yùn)行的富Internet應(yīng)用程序(RIA)。
?一組圖形和媒體包,使開發(fā)人員能夠設(shè)計(jì),創(chuàng)建,測試,調(diào)試和部署在不同平臺上一致運(yùn)行的富客戶端應(yīng)用程序。
WebView:
使用WebKit HTML技術(shù)的Web組件,可以在JavaFX應(yīng)用程序中嵌入Web頁面。在WebView中運(yùn)行的JavaScript可以調(diào)用Java API,Java API可以調(diào)用在WebView中運(yùn)行的JavaScript。
JavaFX中添加了對其他HTML5功能的支持,包括Web套接字,Web Worker和Web字體以及打印功能。
JavaFX WebView:
?JavaFX WebView 是一種迷你瀏覽器(也稱為嵌入式瀏覽器),它通過JavaFX 應(yīng)用程序中的API提供Web查看器和完整瀏覽功能 。
?此瀏覽器基于 WebKit,這是一個(gè)支持HTML5,JavaScript,CSS,DOM渲染和SVG圖形的開源Web瀏覽器引擎。
?WebView類是Node類的擴(kuò)展。
?嵌入式瀏覽器從Node類繼承所有字段和方法,因此它具有其所有功能。
?它封裝了WebEngine對象,將HTML內(nèi)容合并到應(yīng)用程序的場景中,并提供應(yīng)用效果和轉(zhuǎn)換的屬性和方法。
?在WebView對象上調(diào)用的getEngine()方法返回與之關(guān)聯(lián)的Web引擎。
?構(gòu)成嵌入式瀏覽器的類位于javafx.scene.web包中。
?WebView 使開發(fā)人員能夠在其Java應(yīng)用程序中實(shí)現(xiàn)以下功能:
?從本地或遠(yuǎn)程URL呈現(xiàn)HTML內(nèi)容
?支持歷史記錄并提供后退和前進(jìn)導(dǎo)航
?重新加載內(nèi)容
?將效果應(yīng)用于Web組件
?編輯HTML內(nèi)容
?執(zhí)行JavaScript命令
?執(zhí)行從JavaScript到JavaFX的上行調(diào)用
?處理事件
? 除了支持CSS3和ecmascript6(ES6)之外,WebView組件還支持以下HTML5功能:
?DOM3
?畫布
?媒體播放
?表單控件(<input type =“color”>除外)
?可編輯的內(nèi)容
?歷史維護(hù)
?支持<meter>,<progress>,<details>和<summary>標(biāo)簽
?SVG
?Web套接字
?Web Worker
?支持使用本國語言編寫的域名
Web引擎:
1.是一個(gè)能夠一次管理一個(gè)網(wǎng)頁的非可視對象
2.通過其API提供基本網(wǎng)頁功能。
3.它支持用戶交互,例如導(dǎo)航鏈接和提交HTML表單,但它不直接與用戶交互。
4.它加載網(wǎng)頁,創(chuàng)建文檔模型,根據(jù)需要應(yīng)用樣式,并在頁面上運(yùn)行JavaScript。
5.它提供對當(dāng)前頁面的文檔模型的訪問,并允許Java應(yīng)用程序和頁面的JavaScript代碼之間的雙向通信。
6.它包裝了一個(gè)WebPage對象,該對象提供與本機(jī)Webkit核心的交互。
主要代碼介紹:
主界面構(gòu)造:
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);
}
}
監(jiān)聽也沒加載狀態(tài),獲取源碼、所有連接等。
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的采集開發(fā)方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。