内容
JxBrowser 显示各种类型的内容,例如 图片、视频、PDF、Flash 等,但在大多数情况下,您将显示网页的 HTML 内容。 本指南展示了如何访问网页内容、获取当前选定的文本、在网页上查找一些文本、将网页另存为一个文件或一组文件等。
内容大小
默认情况下, Browser
大小为空。 很多网页依赖这个大小,要求它不能为空。 否则,DOM 文档的布局可能根本无法解析和显示。
如果您不需要显示已加载网页的内容,但页面应该“认为”它是在具有非空大小的 Browser
中加载的,那么请使用 Browser.resize(Size)
方法以编程方式设置大小 .
访问 HTML
要获取表示 Frame
的 HTML 的字符串,请使用 Frame.html()
方法。
请仅在 Frame
完全加载时调用此方法。 否则,您可能会收到不完整的 HTML 或空字符串。
以下示例演示了如何打印当前加载的主 Frame
的 HTML:
browser.mainFrame().ifPresent(frame -> System.out.println(frame.html()));
browser.mainFrame().ifPresent { frame -> println(frame.html()) }
访问选择
要将当前加载的 Frame
作为 HTML 选择,请使用 Frame.selectionAsHtml()
方法:
String selectionAsHtml = frame.selectionAsHtml();
val selectionAsHtml = frame.selectionAsHtml()
如果您只需要选定的文本而不需要选定的 HTML,请使用 Frame.selectionAsText()
方法,如下例所述:
String selectionAsText = frame.selectionAsText();
val selectionAsText = frame.selectionAsText()
查找文本
JxBrowser 允许在当前加载的网页或 PDF 上查找文本并突出显示所有匹配项。
JxBrowser 仅通过具有非空大小的加载内容的可见部分搜索文本。
要对当前加载的内容执行搜索,请使用 TextFinder
:
TextFinder textFinder = browser.textFinder();
val textFinder = browser.textFinder()
以下示例演示如何使用指定的搜索参数在当前加载的网页上查找“文本”,并等待搜索完成:
// Find "text" in the currently loaded web page with the given params.
textFinder.find("text", FindOptions.newBuilder()
.matchCase(true)
.build(), findResult -> {
// Check if the text search has been finished.
if (findResult.isSearching()) {
// The Text Finder is still searching the text.
// It's recommended to wait until the search is finished.
} else {
// Text search has been finished, so get total the number of matches.
int numberOfMatches = findResult.numberOfMatches();
}
});
// Find "text" in the currently loaded web page with the given params.
textFinder.find(
"text", FindOptions.newBuilder()
.matchCase(true)
.build()
) { findResult ->
// Check if the text search has been finished.
if (findResult.isSearching) {
// The Text Finder is still searching the text.
// It's recommended to wait until the search is finished.
} else {
// Text search has been finished, so get total the number of matches.
val numberOfMatches = findResult.numberOfMatches()
}
}
匹配的搜索结果突出显示如下:
取消搜索
要清除网页上突出显示的搜索结果并取消搜索,请使用TextFinder.stopFindingAndClearSelection()
或TextFinder.stopFindingAndKeepSelection()
方法。
例如:
textFinder.stopFindingAndClearSelection();
textFinder.stopFindingAndClearSelection()
保存网页
JxBrowser 允许您将网页保存为一个文件或一组文件。
将 Browser.saveWebPage(Path, Path, SavePageType)
与以下参数一起使用:
- 目标文件的路径
- 保存页面资源的目录路径
- 保存操作的类型
在保存网页之前,请确保它没有被加载。建议完全加载网页后再保存。
此方法启动保存过程并立即返回。 因此,无法保证该方法返回时网页将被完全保存。 要了解网页何时完全保存,请使用 Java NIO API 检查目标文件是否存在。
例如:
Path path = createTempDir("web_page");
Path file = path.resolve("target.html");
Path directory = path.resolve("resources");
if (browser.saveWebPage(file, directory, SavePageType.COMPLETE_HTML)) {
// The saving process has been initialized successfully.
} else {
// The saving process has been failed.
}
val path = createTempDirectory("web_page")
val file = path.resolve("target.html")
val directory = path.resolve("resources")
if (browser.saveWebPage(file, directory, SavePageType.COMPLETE_HTML)) {
// The saving process has been initialized successfully.
} else {
// The saving process has been failed.
}
获取网页的位图
该库允许您获取包含当前加载网页像素的位图。 位图大小等于加载网页的 Browser
实例的大小。
为了获取网页图像,我们建议您执行以下操作:
- 将
Browser
实例的大小调整为所需的尺寸(例如 1024х768)。 - 加载一个网页,等待网页主框架加载完成。
- 获取当前加载的网页的位图。
以下示例演示了如何执行此操作:
// Creating and running Chromium engine.
Engine engine = Engine.newInstance(
EngineOptions.newBuilder(HARDWARE_ACCELERATED).build());
Browser browser = engine.newBrowser();
// Resize browser to the required dimension.
browser.resize(1024, 768);
// Load the required web page and wait until it is loaded completely.
browser.navigation().loadUrlAndWait("https://www.google.com");
// Take the bitmap of the currently loaded web page. Its size will be
// equal to the current browser's size.
Bitmap bitmap = browser.bitmap();
// Creating and running Chromium engine.
val engine = Engine.newInstance(
EngineOptions.newBuilder(HARDWARE_ACCELERATED).build())
val browser = engine.newBrowser()
// Resize browser to the required dimension.
browser.resize(1024, 768)
// Load the required web page and wait until it is loaded completely.
browser.navigation().loadUrlAndWait("https://www.google.com")
// Take the bitmap of the currently loaded web page. Its size will be
// equal to the current browser's size.
val bitmap = browser.bitmap()
您可以将接收到的位图转换为 java.awt.image.BufferedImage
或 javafx.scene.image.Image
以进行进一步操作(例如保存到 PNG 文件)。
AWT 缓冲图像
以下代码演示了如何将 Bitmap
转换为 java.awt.image.BufferedImage
并将其保存到本地文件系统上的 bitmap.png
文件:
import com.teamdev.jxbrowser.view.swing.graphics.BitmapImage;
...
// Take the bitmap.
Bitmap bitmap = browser.bitmap();
// Convert the bitmap to java.awt.image.BufferedImage
BufferedImage image = BitmapImage.toToolkit(bitmap);
// Save the image to a PNG file
ImageIO.write(image, "PNG", new File("bitmap.png"));
import com.teamdev.jxbrowser.view.swing.graphics.BitmapImage
...
// Take the bitmap.
val bitmap = browser.bitmap()
// Convert the bitmap to java.awt.image.BufferedImage
val image = BitmapImage.toToolkit(bitmap)
// Save the image to a PNG file
ImageIO.write(image, "PNG", File("bitmap.png"))
查看完整示例。
JavaFX 图像
以下代码演示了如何将 Bitmap
转换为 javafx.scene.image.Image
并将其保存到本地文件系统上的 bitmap.png
文件:
import com.teamdev.jxbrowser.view.javafx.graphics.BitmapImage;
...
// Take the bitmap.
Bitmap bitmap = browser.bitmap();
// Convert the bitmap to javafx.scene.image.Image
Image image = BitmapImage.toToolkit(bitmap);
// Convert javafx.scene.image.Image to java.awt.image.BufferedImage
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(image, null);
// Save the image to a PNG file
ImageIO.write(bufferedImage, "PNG", new File("bitmap.png"));
import com.teamdev.jxbrowser.view.javafx.graphics.BitmapImage
...
// Take the bitmap.
val bitmap = browser.bitmap()
// Convert the bitmap to javafx.scene.image.Image
val image = BitmapImage.toToolkit(bitmap)
// Convert javafx.scene.image.Image to java.awt.image.BufferedImage
val bufferedImage = SwingFXUtils.fromFXImage(image, null)
// Save the image to a PNG file
ImageIO.write(bufferedImage, "PNG", File("bitmap.png"))
查看完整示例。
SWT图像
要将 Bitmap
转换为 `` 并将其保存到本地文件系统上的 bitmap.png
文件,请使用以下方法:
import com.teamdev.jxbrowser.view.swt.graphics.BitmapImage;
...
// Take the bitmap.
Bitmap bitmap = browser.bitmap();
// Convert the bitmap to org.eclipse.swt.graphics.Image
Image image = BitmapImage.toToolkit(display, bitmap);
// Save the image to a PNG file
ImageLoader loader = new ImageLoader();
loader.data = new ImageData[]{image.getImageData()};
loader.save("bitmap.png", SWT.IMAGE_PNG);
import com.teamdev.jxbrowser.view.swt.graphics.BitmapImage
...
// Take the bitmap.
val bitmap = browser.bitmap()
// Convert the bitmap to org.eclipse.swt.graphics.Image
val image = BitmapImage.toToolkit(display, bitmap)
// Save the image to a PNG file
val loader = ImageLoader()
loader.data = arrayOf(image.imageData)
loader.save("bitmap.png", SWT.IMAGE_PNG)
查看完整示例。
设置
使用 BrowserSettings
,您可以为单个 Browser
实例配置不同的内容设置。 您可以禁用图像、插件、JavaScript、本地存储、应用程序缓存,允许运行不安全的内容或允许 JavaScript 访问剪贴板等。您可以在 API 规范中找到支持的设置列表。
默认编码
要在网页上配置默认文本编码,请使用:
browser.settings().defaultEncoding("UTF-8");
browser.settings().defaultEncoding("UTF-8")
JavaScript
默认情况下,在网页上启用 JavaScript。 如果您需要禁用 JavaScript,请使用以下命令:
browser.settings().disableJavaScript();
browser.settings().disableJavaScript()
图像
如果您不需要在网页上显示图像以减少网络流量,那么您可以禁用图像:
browser.settings().disableImages();
browser.settings().disableImages()
插件
您可以过滤已安装的插件,但如果您只需要禁用网页上的所有插件,则使用以下方法:
browser.settings().disablePlugins();
browser.settings().disablePlugins()
本地存储
默认启用本地 WebStorage
。 为了禁用它并防止 JavaScript 在本地存储中存储日期,请使用以下设置:
browser.settings().disableLocalStorage();
browser.settings().disableLocalStorage()
滚动条
当拍摄网页的位图或在自动服务终端应用程序内,你可能想隐藏网页上的滚动条。在这种情况下,请使用以下设置:
browser.settings().hideScrollbars();
browser.settings().hideScrollbars()
调用该方法后, Browser
实例中加载的网页将不再显示滚动条。
网页储存
JxBrowser 允许您以比使用 cookie 更直观的方式访问和使用 JavaScript Web Storage,它提供了浏览器可以存储键/值对的机制。
有两种类型的网络存储:
sessionStorage
为每个给定的源维护一个单独的存储区域,在页面会话期间可用。localStorage
做同样的事情,但即使在浏览器关闭并重新打开时,它仍然存在。
要访问会话和本地网页存储,请使用以下方法:
WebStorage sessionStorage = frame.sessionStorage();
WebStorage localStorage = frame.localStorage();
val sessionStorage = frame.sessionStorage()
val localStorage = frame.localStorage()
localStorage 可能会被禁用。 在这种情况下, WebStorage
方法将抛出 WebStorageSecurityException
错误。
以下示例演示了如何使用 JxBrowser WebStorage API 将项目放入 localStorage
:
frame.localStorage().putItem("Name", "Tom");
frame.localStorage().putItem("Name", "Tom")
您可以使用以下代码在 JavaScript 中访问插入的项目:
window.localStorage.getItem('Name'); // <- Returns "Tom"