我正在使用jxbrowser,
我想使用browser.saveWebpage下载网址列表
public class Downloader{
public Downloader(String url) {
System.setProperty("teamdev.license.info", "true");
LoggerProvider.getChromiumProcessLogger().setLevel(Level.OFF);
Browser browser = new Browser(BrowserType.LIGHTWEIGHT);
browser.addLoadListener(new LoadAdapter() {
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event) {
if (event.isMainFrame()){
String filePath = "D:\\Downloads\\index"+System.currentTimeMillis()+".html";
String dirPath = "D:\\Downloads\\resources";
event.getBrowser().saveWebPage(filePath, dirPath, SavePageType.ONLY_HTML);
}
}
});
browser.loadURL(url);
if(!browser.isLoading())
{
browser.stop());
}
}
public static void main(String args[])
{
JxBrowserDemo jxBrowserDemo=null;
String yourInputFile="D:/file.txt";
ArrayList<String> lines=getUrls(yourInputFile); //read urls from file
for(int i=0; i<lines.size(); i++)
{
Thread.sleep(5000);
jxBrowserDemo=new JxBrowserDemo(lines.get(i));
}
}
}
保存页面在特定时间之前都可以正常工作,然后抛出此异常
线程“主”中的异常java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)
在java.lang.reflect.Method.invoke(未知来源)
在org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)由以下原因引起:
com.teamdev.jxbrowser.chromium.internal.ipc.IPCException:失败
等浏览器浏览器频道969
在com.teamdev.jxbrowser.chromium.Browser.a(SourceFile:376)
在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:200)
在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:172)
在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:139)
在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:125)
在com.teamdev.jxbrowser.chromium.demo.JxBrowserDemo。(JxBrowserDem
o.java:67)
在com.teamdev.jxbrowser.chromium.demo.JxBrowserDemo.main(JxBrowserDemo。
Java:143)
...另外5个
请任何帮助:)
最佳答案
“无法获取浏览器browserChannel 969失败”消息最有可能表明,出于某种原因,Chromium引擎无法创建浏览器实例并为其打开通道。
Chromium引擎可能会对同时创建的浏览器实例的数量有所限制。这些限制可能取决于内存大小,环境配置等。由于您已经创建了968个浏览器实例而没有对其进行处理,因此可能是造成此异常的原因。
另外请注意,内存泄漏是因为您为每个URL创建了新的Browser实例,并且在此URL Browser实例处理完URL后不要调用dispose()
方法。browser.stop();
行是不必要的。
在调用saveWebPage()方法之后,您应该立即等到保存网页并释放浏览器实例。
请看下面的示例代码:
final int maxWaitingTime = 10000;
final int sleepTime = 50;
int currentWaitingTime = 0;
File indexHTML = new File(filePath);
File resourcesFolder = new File(dirPath);
while (!indexHTML.exists() || !resourcesFolder.exists()) {
TimeUnit.MILLISECONDS.sleep(sleepTime);
currentWaitingTime += sleepTime;
if (currentWaitingTime == maxWaitingTime)
throw new RuntimeException(new TimeoutException("The web page could not be saved."));
}
event.getBrowser().dispose();
关于java - 获取异常无法在jxbrowser中获取浏览器浏览器 channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42509305/