gpt4 book ai didi

java - JxBrowser 高效检索网站图标的策略

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:05 27 4
gpt4 key购买 nike

据我所知,JxBrowser 中没有 favicons 的基础设施。图标不应该是标题事件的一部分吗?我想我最好的选择就是选择 http://<domain>/favicon.ico但这将是很多多余的工作(http 客户端和缓存机制)。

有什么方法可以使用 JxBrowser 优雅地处理这个问题吗?

我已经尝试了两种策略来尝试可靠地获取资源,但它不够可靠:

基于事件的 url 获取(ResourceType.FAVICON 从未见过):

browser.context.networkService.resourceHandler = object : ResourceHandler {
override fun canLoadResource(p0: ResourceParams?): Boolean {
if (p0!!.resourceType == ResourceType.FAVICON) println(p0!!.url)
if (p0!!.resourceType == ResourceType.IMAGE && p0.url.contains("favicon")) println("found favicon url: ${p0.url}")
return true
}
}

//基于 xpath 的方法

browser.addLoadListener(object : LoadListener {
override fun onDocumentLoadedInMainFrame(p0: LoadEvent) {
p0.inSwingThread {
val res = it.browser.document.findElements(By.xpath("//link[@rel=\"icon\" or @rel=\"shortcut icon\"]"))
res.forEach {
println("----------")
it.attributes.forEach { println(it.key + " " + it.value) }
}
}
}
// ...
}

最佳答案

现在 JxBrowser API 不提供允许下载 favicon.ico 的功能。文件。我建议您使用标准 Java API 和 http://<domain>/favicon.ico 的方法。 .例如:

URL url = new URL("http://stackoverflow.com/favicon.ico");
InputStream in = new BufferedInputStream(url.openStream());
OutputStream out = new BufferedOutputStream(new FileOutputStream("D:/favicon.ico"));
for ( int i; (i = in.read()) != -1; ) {
out.write(i);
}
in.close();
out.close();

关于java - JxBrowser 高效检索网站图标的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com