日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java javafx webview_基于JavaFX WebView 的采集开发,了解一下?

發布時間:2024/1/23 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java javafx webview_基于JavaFX WebView 的采集开发,了解一下? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

最近想做一個桌面版的客戶端,能夠加載連接,獲取源碼等,主要用于快速的獲取網站的欄目,便與爬蟲該欄目下的最新信息。

相關插件介紹

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

?畫布

?媒體播放

?表單控件(除外)

?可編輯的內容

?歷史維護

?支持,,和標簽

?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 {

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);

}

}

}

}

如果那位想用代碼,可以添加我的公眾號索取哦

總結

以上是生活随笔為你收集整理的java javafx webview_基于JavaFX WebView 的采集开发,了解一下?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。