尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
豆包图片批量下载不求人:脚本管理器+原图提取器全攻略
直接说结论批量下载这件事最稳的方案不是截图也不是一个个右键另存为而是用一个浏览器端的脚本扩展配合一段“原图地址提取器”把豆包图片页面上所有高清大图的直链全部抓出来然后自动批量下载。整个过程熟练之后不到一分钟几十张图一次搞定文件名还能自己控制。这篇文章把这套方案的原理、插件选择、脚本代码、实操步骤和踩坑记录全部写清楚适合经常用AI绘画工具整理素材、做内容配图或者顺手囤灵感图的人。1. 先搞明白为什么豆包图片不能一键批量下载1.1 页面只给你看不给你“整包压缩”用过的人都知道豆包这类AI生图工具有一个规律生成结果是一张一张展示的页面里没有“全选导出”或“一键下载全部”这种按钮。单个图片可以右键保存也可以在预览大图里另存但只要你生成的是十几张、几十张的一组图手动操作就会变成体力活。更难受的是右键保存下来的文件不一定是你看到的那个清晰度。很多网页为了加载速度默认展示的是压缩过或带参的预览图版本真正的高分辨率原图藏在背后的链接里。鼠标另存为只能拿到浏览器当前加载的那一份质量打折扣不说文件名还经常是一串无规律的数字和字母后期整理素材库时完全是灾难。批量下载的需求本质上是两个问题拿到所有图片的真实地址以及用一个自动化的方式把地址对应的文件保存到本地。1.2 水印问题的真相插件去不掉像素里的角标这里必须先说清楚“无水印”的含义。如果豆包生成的图片在像素上本身就印了一个半透明角标比如左下角或右下角有产品标识那任何前端脚本、浏览器插件都无能为力。角标已经渲染进图片内容里了不是在网页上叠的一个遮罩层脚本能做的就是抓取源文件除非源文件本身没有角标否则你下载到的所有图都自带这一层标识。所以正确理解标题里“无水印”的方式是让下载器抓取页面能够提供的最干净、最大分辨率的原始文件而不是抓取被压缩、被裁剪、被套了网页水印的预览图。操作前建议先去工具设置里翻一翻有没有“保存到本地时附带水印”、“导出图片角标”之类的开关如果有就关掉没有的话就接受“原图母版”这个边界。脚本永远不能无中生有它只能帮你把已有的好东西批量搬回家。1.3 批量下载的核心其实是拿到一批“直链”要理解整个方案只需要记住一个概念网页上任何一张图片本质上都是服务器上的一个文件通过URL地址加载出来的。批量下载的流程就是在页面里找出所有图片对应的URL。过滤掉图标、头像、背景图、缩略图这些无关资源。保留清晰度足够高的“目标大图”。用脚本逐个触发浏览器下载保存到本地。这个过程完全可以不依赖任何平台方的接口因为浏览器开发者工具本身就能看到页面请求的每一个图片链接。插件做的事情只是把这个“看链接、筛链接、点下载”的过程自动化。想明白这一点就不会被某个具体站点的改版牵着鼻子走因为原理是通用的。2. 方案对比与插件选择为什么我最后选了脚本管理器2.1 三种常见方案先帮你排除两个坑很多人遇到批量下载需求第一反应是装一个“网页图片下载器”类的扩展或者用截图工具逐屏截。这两种方案我都试过各有各的坑。截图工具的问题最明显截图的分辨率受限于你的屏幕和窗口尺寸一张竖图或横版长图截下来要么被压缩比例要么被切成多段。而且截图会把浏览器的滚动条、页面留白、鼠标指针这些杂物带进去后期还得二次裁剪几十张图截完修图时间比保存时间还长。只适合偶尔要一两张的情况。图片下载器类的扩展倒是能批量提取链接但很多扩展的过滤规则是写死的到了豆包这种图片链接带长长签名参数的页面经常把缩略图当成原图抓回来或者把头像、图标也一起打包。而且扩展商店里的下载器质量参差不齐有的带广告有的需要额外权限。用起来总觉得隔了一层出了问题也不知道去哪里改。2.2 脚本管理器方案的优势我最终选择的是“脚本管理器加一段自写脚本”的路线。这里的“插件”指的是脚本管理器类工具它的核心价值不是替你写好提取规则而是给你一个可以随时编辑、随时运行的脚本环境。好处有三条提取逻辑完全自己控制想抓大图就抓大图想过滤logo就过滤logo页面改版了改几行代码就行。不依赖第三方更新扩展类工具一旦开发者不再维护几个月后可能就失效了。自存一段脚本遇到任何站点都能改改用。更轻量、更透明脚本管理器只是一个执行环境真正跑的逻辑你都能看到不会在后台偷偷做什么。从维护成本角度看这个方案属于“一次配置长期复用”。我自己的脚本从最早只能抓单一图片站点慢慢改成了一套通用的“大图批量提取器”每次遇到新的图片网站只需要微调过滤参数就能继续用。2.3 安装脚本管理器三步完成脚本管理器的安装没什么难度以主流浏览器为例打开浏览器的扩展商店搜索“脚本管理器”这个类别选一个安装量高、更新时间近的扩展添加到浏览器。安装完成后浏览器工具栏会出现对应的图标点进去能看到管理面板。不同浏览器可能要求开启开发者模式才能安装这类扩展按提示操作即可。整个安装过程不到两分钟。装好之后接下来真正花时间的部分也是这篇文章最核心的部分把批量提取和下载的脚本写出来、部署进去。3. 手把手写一个“原图画质批量下载”脚本3.1 脚本的核心逻辑四步筛选在贴代码之前先讲清楚脚本在页面里到底做了什么。你可以把网页想象成一个装满照片的抽屉脚本要做的是从中挑出你要的那几张步骤是遍历页面上所有img标签收集可能的图片地址。重点看一眼srcset属性很多响应式页面会把同一张图的不同分辨率写在这里srcset里最后一项往往是最大分辨率优先级最高。从多个候选属性里取地址比如currentSrc、>// UserScript // name 网页大图批量提取下载器 // namespace local.tools // version 1.0 // description 提取页面内高清原图地址并批量下载请仅用于个人素材整理 // match *://*/* // grant none // /UserScript (function () { use strict; // 配置区 const MIN_WIDTH 600; // 小于该宽度的图片直接忽略单位px const MIN_HEIGHT 600; // 小于该高度的图片直接忽略单位px const DOWNLOAD_DELAY 800; // 每两个下载任务之间的间隔单位毫秒 const MAX_COUNT 50; // 单次最多下载数量防止页面被拖垮 const FILENAME_PREFIX batch_; // 下载文件名的前缀 // const imageUrls new Set(); document.querySelectorAll(img).forEach((img) { // 从 srcset 中取最大分辨率地址 let maxUrl ; let maxSize 0; if (img.srcset) { img.srcset.split(,).forEach((item) { const parts item.trim().split( ); const url parts[0]; const size parseInt(parts[1]) || 0; if (size maxSize) { maxSize size; maxUrl url; } }); } const candidates [ maxUrl, img.currentSrc, img.src, img.getAttribute(data-src), img.getAttribute(data-original), img.getAttribute(data-lazy-src), ]; candidates.forEach((url) { if (!url || url.startsWith(data:)) return; // 过滤掉明显不是目标内容的资源 if (/logo|avatar|icon|sprite/.test(url)) return; try { const absoluteUrl new URL(url, location.href); absoluteUrl.hash ; // 去掉hash参数防止二次请求 // 尺寸过滤自然尺寸不满足阈值就跳过 if (img.naturalWidth MIN_WIDTH || img.naturalHeight MIN_HEIGHT) { return; } imageUrls.add(absoluteUrl.href); } catch (e) { // 解析失败的URL直接忽略 } }); }); const list Array.from(imageUrls).slice(0, MAX_COUNT); console.log([批量下载器] 找到 ${list.length} 张图片); if (list.length 0) { alert(没有找到符合条件的大图请检查页面图片是否全部加载完成); return; } const downloadAll async () { for (let i 0; i list.length; i) { const link document.createElement(a); link.href list[i]; link.download FILENAME_PREFIX String(i 1).padStart(3, 0) .png; document.body.appendChild(link); link.click(); document.body.removeChild(link); // 给浏览器一点缓冲时间 await new Promise((resolve) setTimeout(resolve, DOWNLOAD_DELAY)); } console.log([批量下载器] 全部下载任务已触发); }; if (confirm(确认开始批量下载 ${list.length} 张高清大图吗)) { downloadAll(); } })();讲几个关键细节DOWNLOAD_DELAY非常关键。如果一次性触发大量下载浏览器会认为这是恶意弹窗直接拦截后续任务。实测下来每800毫秒下载一个比较稳几十张图也就半分钟。如果你网络好、图片尺寸小可以调成400毫秒但如果中途下载停了优先考虑把间隔调大。img.naturalWidth和naturalHeight是图片渲染后的自然尺寸比读取width属性靠谱得多。用属性值判断可能拿到CSS缩放后的尺寸而自然尺寸是图片文件的真实像素。判断阈值可以根据场景调整如果是壁纸站想抓更高清的图可以提到1000以上。FILENAME_PREFIX是文件名前缀批量下载时浏览器会按a标签的download属性命名文件所以序号的padStart能保证文件名按顺序排列时不乱。3.3 为什么用a标签触发下载而不是fetch文件这里有个新手很容易踩的坑想用fetch把图片文件读回来再通过浏览器API保存。但跨域资源的fetch会被拦截页面加载图片没问题脚本主动请求却会拿到CORS错误。所以脚本采用的是“创建隐藏的a标签设置href为图片地址download属性指定文件名然后模拟点击”这种方式。它的本质是复用浏览器自身的下载机制每次点击都等价于你在新标签页打开图片之后点了一次保存这样既绕开CORS限制又不需要处理二进制数据。代价是每个下载任务之间必须留间隔否则浏览器会误判为弹窗批量下载。4. 实操现场从豆包图片页批量下载到本地4.1 第一步确保页面上的图片全部加载完成这一步的重要性往往被低估。现在很多图片网站都做了懒加载你进入页面时只加载了前几个图片后面那些只有滚动到附近才会触发真实请求。如果脚本运行的时候后面的图片根本没加载脚本自然找不到它们的地址。我自己的习惯是先手动把页面从上到下快速滚动一遍让所有懒加载图片全部请求完再回到页面顶部运行脚本。如果你不想手动滚也可以在开发者工具控制台执行一段自动滚动代码(async function () { const step 600; for (let y 0; y document.body.scrollHeight; y step) { window.scrollTo(0, y); await new Promise((resolve) setTimeout(resolve, 200)); } })();这段代码会让页面按600像素步长自动滚动每次停顿200毫秒给图片请求留出时间。滚到底之后再配合几秒钟等待让最后的异步请求全部完成。4.2 第二步运行脚本观察控制台输出脚本管理器部署好之后在豆包图片页面点击插件图标在弹出的管理面板里点击脚本名称后面的开关按钮脚本就会在当前标签页执行。以我一次实操为例假设豆包页面里一次展示了20张生成的图片配置为MIN_WIDTH600、MIN_HEIGHT600运行脚本后控制台输出“找到 20 张图片”然后弹出一个确认框。点击确定浏览器底部开始依次冒出下载任务每个文件名的格式是batch_001.png、batch_002.png一路排到batch_020.png。这里注意一点浏览器可能会在连续弹出几个下载任务后弹出“此站点正在尝试下载多个文件”的提醒需要手动选择“允许”。如果不想每次都点可以在浏览器的站点设置里提前把当前域名加入“自动下载多个文件”的允许列表。输出结果里如果数量远少于预期大概率是尺寸过滤阈值设高了或者页面里有部分图片没有触发自然尺寸读取。这时候把MIN_WIDTH和MIN_HEIGHT临时改小重新运行一次看看。4.3 第三步下载后的整理习惯批量下载只是起点整理才是长期不乱的保障。我的习惯是按项目和日期建立文件夹比如20250401_风景主题_批量出图里面再按生成批次分两个子文件夹。文件名前缀也会带上主题关键词比如scenery_001.png、scenery_002.png这样就算版本更新或重装电脑素材也能一眼对上号。另外建议定期把重要素材备份到移动硬盘或网盘因为AI生图工具通常不会永久保存所有历史记录过一段时间再看当时的批量图片经常已经访问不到了。下载到本地的东西才是自己的。5. 常见问题与排查技巧实录这一段是踩坑记录照着表对号入座就行。现象原因解决方案找到的图片数量明显少于页面显示数页面懒加载未触发或脚本运行时图片还在加载中先滚动页面让所有图片加载完成再运行脚本下载下来的文件都是几十KB的缩略图抓到的URL是压缩图地址真正的原图在srcset里没被正确取到检查currentSrc是否为空换成读取srcset的最大项也可以把MIN_WIDTH提高到1000以上下载了几个文件后浏览器不再继续下载连续下载任务被浏览器拦截调大DOWNLOAD_DELAY到1000毫秒以上手动点击“允许下载多个文件”文件名全是乱码或网页标题download属性在某些浏览器下被忽略将a标签的download属性值设置完整包括扩展名确认没有和跨域下载冲突脚本运行后完全没有弹窗页面是SPA单页应用脚本注入时机不对刷新页面后等待2到3秒再点击脚本按钮如果还是不行把脚本的run-at改成document-idle提取到很多头像和图标过滤正则覆盖不全在过滤逻辑里追加对应关键词比如emoji、avatar、thumbnail5.1 下载到一半停止最常见的三个原因第一个原因是浏览器自动拦截。Chrome和Edge这类浏览器对短时间内的连续下载有保护机制一旦触发右下角会出现提示需要手动批准。以我的经验把下载间隔控制在800毫秒以上绝大多数情况不会触发拦截但每次最多下载50张以内的限制也要保留不是怂是给浏览器留余地。第二个原因是图片链接带有时效性签名。很多平台会给图片URL加时间戳或token如果页面停留时间过长签名过期点击下载就会跳到404或重新鉴权。解决办法是第一次打开页面后就尽快运行脚本不要拖太久遇到签名过期的链接可以刷新页面重新提取。第三个原因是文件名冲突。浏览器如果发现下载目录里已经有了同名文件有的会直接改名有的会弹窗询问有的则直接跳过。所以用batch_001这类带序号的命名方式时如果之前下载过同批次同名文件建议要么换前缀要么把上次的文件先移走。5.2 如何验证下载到的是高清原图下载完成之后我习惯随机挑两张检查实际像素。Windows和macOS都能直接查看图片属性里的分辨率字段或者用图片查看器打开后看信息。如果分辨率和你之前预览的大图一致说明抓取成功如果尺寸小了一圈回头检查提取逻辑中srcset部分有没有被正确执行。还有一个小技巧在浏览器开发者工具的Network面板里刷新页面后筛选img请求自己看一眼请求URL中的参数。如果URL里有w200这种宽度参数大概率是压缩图地址可以在脚本中把这类参数去掉或者手工替换成更大尺寸的参数再下载。6. 关于水印、版权和批量下载的边界问题6.1 插件能做什么不能做什么脚本只能做“提取页面已有资源”这件事。它能帮你找到页面加载出来的最大、最清晰的文件帮你批量保存到本地帮你用可读的文件名归档。它不能反向去除图片像素里的角标水印也不能绕过平台的访问限制或接口鉴权。所以你如果在豆包生成的图片成品里看到了产品角标觉得影响使用正确流程不是找“去水印脚本”而是先去产品设置里查有没有“无水印保存”或“关闭角标”的选项或者直接查看当前方案的使用权益。这些是平台层决定的事情前端脚本永远无法染指。想清楚这条边界就不会被很多号称可以“无损去水印”的工具割韭菜。6.2 批量下载自己生成的内容也要注意授权范围这个脚本的试用场景建议严格限定在“自己生成、自己有权使用”的图片范围内。整理自己的AI绘画作品、做个人灵感库、备份自己账号下的创作这些完全没有问题。但你拿它去抓取其他创作者的画稿或商业平台的成品图哪怕技术上可行也可能触碰版权和服务条款。很多图片平台的用户协议里明确规定未经授权不得抓取、批量下载站点内容。虽然个人使用通常不会有人追究但尊重别人作品的意识还是要有的。批量下载是一把工具用在自己的素材上是效率用在别人的版权内容上就是风险。6.3 批量操作的小心机频率和体验都重要脚本里特意加了MAX_COUNT这个限制是为了避免一次下载太多文件给页面服务器造成压力。就算是一张张手动另存为连续保存几百张也会让平台日志觉得异常。批量操作时留好间隔、控制总量既是对别人的服务器负责也是保护自己的账号安全。另外下载过程中尽量让浏览器窗口保持在前台不要切走太久。有些浏览器在标签页进入后台后会节流脚本执行导致下载间隔被拉长甚至任务卡住。实测下来保持页面可见、让下载任务匀速跑完比切到后台快速乱点稳定得多。7. 一点个人经验和这套思路的扩展空间我自己其实一开始也走错过路最早保存AI生成图片用的是最原始的手动另存一次生成了30张图我硬是一张一张点了30次右键、30次另存为到头来文件名字全是时间戳整理又花了一晚上。后来下定决心把脚本方案落地前后调试了小半天之后再用就完全是降维打击。这里分享一个后续很好用的扩展思路同样的脚本逻辑不只是豆包这类AI生图工具能用任何以图片列表形式展示内容的网站基本都能套用。唯一要调整的就是过滤参数和候选属性比如有些图片站把原图地址放在>
RELATED

相关推荐

前端组件库调试痛点看 yalc:用快照与显式推送替代 npm link

前端组件库调试痛点看 yalc:用快照与显式推送替代 npm link

如果你维护过跨业务项目复用的前端组件库,大概率经历过这种尴尬:在某业务项目里发现了组件的样式问题,改完组件库代码要重新构建、再手动把产物拷贝进目标项目的node_modules里反复验证,来回几次就烦了。我一开始也是这么干的&…

📅 2026/10/13 4:22:15
MinGW免安装版:Windows下可复现的C/C++编译环境交付方案

MinGW免安装版:Windows下可复现的C/C++编译环境交付方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/13 4:22:15
DOM增删改与节点遍历:从写死数据到动态刷新的实践之路

DOM增删改与节点遍历:从写死数据到动态刷新的实践之路

从写死数据到动态刷新:Web APIs Day3的DOM增删改与遍历实践我印象特别深的一次经历,是做某个后台管理系统的列表页时,产品经理过来说:“这个表格的数据不要写死,要能动态增删行。”当时我第一反应是“这有什么难的”&a…

📅 2026/10/13 4:22:15
MORE NEWS

更多资讯

📰

STM32 CAN总线实战:从协议原理到配置收发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

多模态Agent如何规划UI测试路径:从感知融合到动态决策的工程实践

1. 多模态 Agent 做 UI 测试,到底难在哪UI 测试这件事,做过的人都懂——写起来不难,维护起来要命。一个按钮挪了位置、一个弹窗改了文案、一个加载动画多转了半秒,传统基于选择器的自动化脚本就可能集体飘红。而多模态 Agent 的出…

📰

多步任务总在细节崩盘?用技能编排让智能体真正稳定

最初让我意识到"工具调用"和"技能编排"是两码事的,是一次很普通的实测:我在一个demo里给智能体接入了邮件发送、日历查询和文档搜索三个工具,模型只凭从三个工具拿到的零散结果,接连搞砸了一个"帮用户确…

📰

Agent技能系统实战:为大模型装上可插拔的“手”和“脚”

这两年但凡碰过AI应用开发的,应该都绕不开一个词——Agent(智能体)。模型本身只是“脑子”,真正让它干活的,是那一套技能系统,也就是项目标题里说的“agent-skills”。不少团队早期做Agent产品时都有一个共…

📰

AnyPS5:跨平台文件处理与格式转换的轻量化解决方案

1. 项目缘起与核心定位AnyPS5 这个名字第一次出现在我视野里的时候,我正被一堆跨平台文件处理的需求折腾得够呛。团队里有人用 Windows 做设计,有人用 macOS 写代码,还有人习惯在 Linux 环境下跑批处理脚本,每次交付物在三个系统之…

📰

UCINET数据导入实战:格式规范、Excel整理与高频排错

1. 先搞清楚UCINET到底在等什么数据很多人在UCINET上栽的第一个跟头,不是不会跑算法,而是数据根本喂不进去。明明Excel里填得工工整整,一点Import却报错,或者导进去之后变成一团乱麻,节点对不上、值全错位。这些问题的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬