首页 > 解决方案 > 在任何浏览器中以编程方式保存或获取页面上图像的字节数组数据(以其他方式保存),而无需再次重新下载它们

问题描述

我正在寻找一种将图像保存在我正在浏览的页面上的方法(本质上是随你浏览而刮),而无需重复下载请求。有多种情况下,如果您尝试这样做,图像根本无法正确下载,并且由于浏览器已经下载了一次,我觉得必须有一种方法可以避免浪费互联网流量和等待图像所花费的时间,尤其是大的,重新下载。也许有一种方法可以从我还没有找到的缓存中读取它们。

我已经尝试使用canvas重绘图像并获取 base64 编码的字符串并获取二进制 blob 字节数组,但如果有任何 CORS 限制,这些方法将不起作用。而且这些也不会导致原始的 1 对 1 图像字节。

是否有可能在任何现代浏览器中获取已经收到的图像(如您所见,例如,在 Firefox > 工具 > 页面信息 > 媒体选项卡中)而不发出第二次下载请求?

然后,我会将源图像文件的字节数组(或它的 base64 编码字符串)发送到一个localhost地址,以使用监听应用程序将其保存为文件(这部分我已经实现)。


我不是在寻找浏览器插件/扩展或在浏览器 GUI 中按下哪些菜单按钮,但对于 javascript 方法,我可以通过 GreaseMonkey(或任何其他支持工作解决方案的用户脚本扩展)调用用户脚本来获取源图像文件数据。

我已经看过较旧的问题,它们要么没有任何有效的答案,要么答案有诸如 CORS 或有损画布重绘之类的问题,或者重复的下载请求可能不起作用,如上所述。因此,如果您链​​接到副本,请确保它有一个没有这些警告的有效解决方案。

标签: javascriptimageweb-scrapingbrowsergreasemonkey

解决方案


推荐阅读