使用JavaScript实现获取页面上所有的img并保存本地

 更新时间:2024年12月13日 10:32:13   作者:Struggle_zhu  
这篇文章主要为大家详细介绍了如何使用JavaScript实现获取页面上所有的img并保存到本地,文中的示例代码讲解详细,有需要的小伙伴可以了解下

浏览器的 JavaScript 环境中受限于安全和隐私原因,不允许直接指定下载文件夹或访问本地文件系统。因此,无法通过纯 JavaScript 在浏览器控制台中实现下载图片到指定文件夹的功能。

然而,您可以使用 Web API 提供的文件系统访问 API 进行一定程度的操作,但需要用户手动确认和操作。以下是一个在支持文件系统访问 API 的浏览器(如 Chrome)中使用的示例脚本:

(async () => {
  // 获取所有图像元素
  const images = document.querySelectorAll("img");

  // 文件系统访问 API:请求用户选择下载文件夹
  const dirHandle = await window.showDirectoryPicker();

  for (let [index, img] of images.entries()) {
    try {
      const url = img.src;
      const response = await fetch(url);
      const blob = await response.blob();

      // 获取图片的 MIME 类型并确定文件扩展名
      const contentType = blob.type;
      let extension = contentType.split("/")[1]; // 从 MIME 类型中提取文件扩展名

      // 特别处理 SVG 图片格式
      if (contentType === "image/svg+xml") {
        extension = "svg";
      }

      const fileName = `${index + 1}.${extension}`;

      // 创建并写入文件
      const fileHandle = await dirHandle.getFileHandle(fileName, {
        create: true,
      });
      const writable = await fileHandle.createWritable();
      await writable.write(blob);
      await writable.close();

      console.log(`Downloaded: ${fileName}`);
    } catch (error) {
      console.error(`Failed to download image ${index + 1}:`, error);
    }
  }
})();

此脚本的工作方式如下:

  • 获取当前页面的所有 img 标签。
  • 使用文件系统访问 API 请求用户选择下载文件夹(此操作需要用户确认)。
  • 遍历每个图片 URL,使用 fetch 函数获取图片数据。
  • 在用户选择的文件夹中创建对应的文件,并将图片数据写入文件。

请注意,此方法仅在支持文件系统访问 API 的浏览器(如 Chrome)中可用,并且用户需要手动确认并选择下载文件夹。

要在浏览器控制台中执行此脚本,请按照以下步骤操作:

  • 打开你要下载图片的网页。
  • 按 F12 或 Ctrl + Shift + I(Windows)或 Cmd + Option + I(Mac)打开开发者工具。
  • 选择“Console”标签页。
  • 将上面的脚本代码粘贴到控制台中,然后按 Enter 键执行。

执行脚本时,浏览器会弹出文件夹选择对话框,用户选择文件夹后,脚本会自动将所有图片下载并保存到该文件夹中。

知识补充

除了上文的内容,小编还为大家整理了使用js脚本一键下载网页所有图片的方法,希望对你有所帮助

测试环境:Chrome开发者模式下(启动Chrome,按F12即可)

测试网页:知乎某问题

原理很简单,用到了a标签的href及download属性和点击事件。

完整代码

//一个对象,存储页面图片数量和下载的数量
var monitorObj = {
    imgTotal: 0,
    imgLoaded: 0
}
//创建a标签,赋予图片对象相关属性,并插入body
var createA = function (obj) {
    var a = document.createElement("a");
    a.id = obj.id;
    a.target = "_blank";//注意:要在新页面打开
    a.href = obj.url;
    a.download = obj.url;

    document.body.appendChild(a);
}

//获取页面的图片
var imgs = document.images;
//创建每个图片对象的对应a标签
for (var i = 0; i < imgs.length;i++){
    var obj = {
        id: "img_" + i,
        url: imgs[i].src
    }
    //过滤掉不属于这几种类型的图片
    if (["JPG", "JPEG", "PNG","GIF"].indexOf(obj.url.substr(obj.url.lastIndexOf(".")+1).toUpperCase()) < 0) {
        continue;
    }
    //这里是为了去掉知乎用户头像的图片,头像大小是50*50
    if (imgs[i].width <= 50 || imgs[i].height <= 50) {
        continue;
    }
    //统计图片数量
    monitorObj.imgTotal++;
    createA(obj);
}
//开始下载图片
for (var i = 0; i < imgs.length; i++) {
    if (document.getElementById("img_" + i)) {
        //重点:触发a标签的click事件
        document.getElementById("img_" + i).click();
        monitorObj.imgLoaded++; //统计已下载的图片数量
    }
}
console.log("已下载:"+monitorObj.imgLoaded + "/" + monitorObj.imgTotal);

到此这篇关于使用JavaScript实现获取页面上所有的img并保存本地的文章就介绍到这了,更多相关JavaScript获取页面img内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于p5.js 2D图像接口的扩展(交互实现)

    基于p5.js 2D图像接口的扩展(交互实现)

    这篇文章主要为大家详细介绍了基于p5.js 2D图像接口的扩展,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 微信小程序云开发之使用云存储

    微信小程序云开发之使用云存储

    这篇文章主要为大家详细介绍了微信小程序云开发之使用云存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 使用Axios结合Typescript二次封装完整详细场景使用案例

    使用Axios结合Typescript二次封装完整详细场景使用案例

    本文详细介绍了如何使用TypeScript对Axios进行二次封装,以提高HTTP请求的统一管理和可维护性,通过创建Axios实例、封装请求和响应处理、错误处理以及创建特定的API服务,可以实现更加一致和方便的API调用,需要的朋友可以参考下
    2024-11-11
  • 借助JavaScript脚本判断浏览器Flash Player信息的方法

    借助JavaScript脚本判断浏览器Flash Player信息的方法

    做了一个小的Demo,在测试时发现经常报错,对此总结了一下借助JavaScript脚本判断浏览器Flash Player信息的方法,需要的朋友可以参考下
    2014-07-07
  • js实现登陆与注册功能

    js实现登陆与注册功能

    这篇文章主要为大家详细介绍了js实现登陆与注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 详解element-ui 表单校验 Rules 配置 常用黑科技

    详解element-ui 表单校验 Rules 配置 常用黑科技

    这篇文章主要介绍了element-ui 表单校验 Rules 配置 常用黑科技,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • BootStrap便签页的简单应用

    BootStrap便签页的简单应用

    本文通过实例代码给大家简单介绍了bootstrap便签页的简单应用,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • 二叉树先序遍历的非递归算法具体实现

    二叉树先序遍历的非递归算法具体实现

    这篇文章主要介绍了二叉树先序遍历的非递归算法,有需要的朋友可以参考一下
    2014-01-01
  • JavaScript 代码压缩工具小结

    JavaScript 代码压缩工具小结

    为了使页面更快的完成加载,经常需要对javascript/css代码进行压缩以减小体积,这里简单列一下用过的压缩工具,同时也作为存档
    2012-02-02
  • fetch跨域问题的使用详解

    fetch跨域问题的使用详解

    这篇文章主要介绍了fetch跨域问题的使用详解,fetch 的核心主要包括:Request , Response , Header , Body,利用了请求的异步特性 --- 它是基于 promise 的,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论