JxBrowser是一个Java浏览器控件,是基于chromium内核的。
运行环境为Windows7 / Windows10,JDK1.7。
代码:
package com.test;
import java.awt.BorderLayout;
import java.nio.charset.Charset;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserContext;
import com.teamdev.jxbrowser.chromium.BrowserPreferences;
import com.teamdev.jxbrowser.chromium.DataReceivedParams;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.NetworkService;
import com.teamdev.jxbrowser.chromium.events.FailLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
import com.teamdev.jxbrowser.chromium.events.NetError;
import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter;
import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent;
import com.teamdev.jxbrowser.chromium.events.StartLoadingEvent;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import com.teamdev.jxbrowser.chromium.swing.DefaultNetworkDelegate;
public class Test {
public static void browser() throws Exception{
//User-Agent (用户代理)
// BrowserPreferences.setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1");
BrowserPreferences.setUserAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36");
//LoggerProvider.setLevel(Level.OFF);
BrowserContext browserContext = BrowserContext.defaultContext();
NetworkService networkService = browserContext.getNetworkService();
networkService.setNetworkDelegate(new DefaultNetworkDelegate() {
@Override
public void onDataReceived(DataReceivedParams params) {
if (params.getMimeType().equals("text/html")) {
String data = new String(params.getData(), Charset.forName("UTF-8"));
//System.out.println("data = " + data);
}
String params_url = params.getURL();
String response = new String(params.getData(), Charset.forName("UTF-8"));
//System.out.println("params_url:" + params_url);
}
});
final Browser browser = new Browser();
BrowserView browserView = new BrowserView(browser);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(browserView, BorderLayout.CENTER);
frame.setSize(800, 600);//设置窗口大小
frame.setLocationRelativeTo(null);
frame.setVisible(true);
//禁止加载图片
// BrowserPreferences preferences = browser.getPreferences();
// preferences.setImagesEnabled(false);
// preferences.setLoadsImagesAutomatically(true);
// browser.setPreferences(preferences);
// Handle proxy authorization.
// browser.getContext().getNetworkService().setNetworkDelegate(new JackNetworkDelegate4A47(frame,browserView));
browser.loadURL("https://www.baidu.com/");//打开页面
//添加一个完成加载的事件:
//这里当每次加载一个新的页面的时候 browser.loadURL(...) ,都会进来此方法
browser.addLoadListener(new LoadAdapter() {
@Override
public void onStartLoadingFrame(StartLoadingEvent event) {
if (event.isMainFrame()) {
System.out.println("Main frame has started loading");
}
}
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event) {
String html=browser.getHTML();
String title=browser.getTitle();
//System.out.println("title:" + title);
if (event.isMainFrame()) {
String html2 = event.getBrowser().getHTML();
String url2 = event.getBrowser().getURL();
System.out.println("url=" + url2);
//browser.loadURL(url);
//执行js
//event.getBrowser().executeJavaScript("document.getElementsByClassName('xxx')[0].innerHTML='<h2>这是一段测试文字</h2>'");
}
}
@Override
public void onFailLoadingFrame(FailLoadingEvent event) {
NetError errorCode = event.getErrorCode();
if (event.isMainFrame()) {
System.out.println("Main frame has failed loading: " + errorCode);
}
}
});
browser.addScriptContextListener(new ScriptContextAdapter() {
@Override
public void onScriptContextCreated(ScriptContextEvent event) {
Browser browser = event.getBrowser();
JSValue window = browser.executeJavaScriptAndReturnValue("window");
//window.asObject().setProperty("java", new JavaObject());
//window.asObject().setProperty("java", "12345678");
//System.out.println("addScriptContextListener执行了");
}
});
//browser.executeJavaScript("document.title ='这是一个自定义的标题';");
}
public static void main(String[] args) {
try {
browser();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
完整代码包地址:https://wwnj.lanzout.com/i39EF11er5wb
