很简单的问题:我创建了一个小应用程序,基本上只是一个收藏夹,它坐落在我的系统托盘中,以便我可以从同一位置打开经常使用的站点/文件夹/文件。从我的系统获取已知文件类型的默认图标并不是非常复杂,但是我不知道如何获取网站的favicon。(例如,SO在地址栏中具有灰色->橙色堆栈图标)
有人知道我该如何做到这一点吗?
很简单的问题:我创建了一个小应用程序,基本上只是一个收藏夹,它坐落在我的系统托盘中,以便我可以从同一位置打开经常使用的站点/文件夹/文件。从我的系统获取已知文件类型的默认图标并不是非常复杂,但是我不知道如何获取网站的favicon。(例如,SO在地址栏中具有灰色->橙色堆栈图标)
有人知道我该如何做到这一点吗?
在域的根目录下查找 favicon.ico
www.domain.com/favicon.ico
寻找带有 rel="shortcut icon"
属性的 <link>
标签
<link rel="shortcut icon" href="/favicon.ico" />
寻找带有 rel="icon"
属性的 <link>
标签
<link rel="icon" href="/favicon.png" />
后两种方法通常会产生更高质量的图像。
为了覆盖所有情况,还有特定设备图标文件,可能会产生更高质量的图像,因为这些设备通常具有比浏览器需要的图标更大的图标:
<link rel="apple-touch-icon" href="images/touch.png" />
<link rel="apple-touch-icon-precomposed" href="images/touch.png" />
如果您只是想下载图标而不在意图标类型,可以使用像 http://www.google.com/s2/favicons 这样的实用工具来完成所有繁重的工作:
var client = new System.Net.WebClient();
client.DownloadFile(
@"http://www.google.com/s2/favicons?domain=stackoverflow.com",
"stackoverflow.com.ico");
&sz=:size
,其中的 :size
表示图片的像素大小,例如 https://www.google.com/s2/favicons?sz=32&domain_url=stackoverflow.com
。 - ATYB2020年更新
以下是你可以在2020年及以后使用的三项服务。
<img height="16" width="16" src='https://icons.duckduckgo.com/ip3/www.google.com.ico' />
<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.google.com' />
<img height="16" width="16" src='https://api.statvoo.com/favicon/?url=google.com' />
<link rel="icon" href='/SOMERELATIVEPATH/favicon.ico' type="image/x-icon" />
获取href
中的字符串,并将其附加到网站的基本URL(假设为"http://WEBSITE/"
),使其看起来像
http://WEBSITE/SOMERELATIVEPATH/favicon.ico
这是favicon的绝对路径。如果您没有以这种方式找到它,则它也可能在根目录中,在这种情况下URL为http://WEBSITE/favicon.ico
。
<html>
<head>
<title>Capture Favicon</title>
</head>
<body>
<a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a>
</body>
</html>
减少每个页面所需的请求数是一个好的实践方法。 因此,如果您需要多个图标,yandex可以在一次查询中制作一个favicon精灵。 以下是一个例子: http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/
<link rel="shortcut icon"
href="http://sstatic.net/stackoverflow/img/favicon.ico">
<link rel="apple-touch-icon"
href="http://sstatic.net/stackoverflow/img/apple-touch-icon.png">
如果是HTML格式,你可以使用HTML Agility Pack或XmlDocument来解析,然后使用WebClient.DownloadFile()方法下载。
以下是我使用Agility Pack获取此内容的代码:
var favicon = "/favicon.ico";
var el=root.SelectSingleNode("/html/head/link[@rel='shortcut icon' and @href]");
if (el != null) favicon = el.Attributes["href"].Value;
2020年,从CLI使用duckduckgo.com的服务
curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico
示例
curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
<link rel="icon" type="image/png" href="/someimage.png" />
在这里应该使用正则表达式。如果没有找到标签,则在站点根目录中查找favicon.ico
。如果仍未找到,则该站点没有favicon。
获取嵌入favicon的URL:
domain=google.com
替换为domain=<其他网站域名>
同时获取多个网站的favicon
其他替代方法
chrome://favicon/https://google.com
edge://favicon/https://google.com
shortcut icon
,如果找到了,请复制URL。