<img> 或自定义属性即可)。 步骤 1:安装脚本
步骤 2:找一个小图床站点做实验(例:xxx.com/gallery/1 … 100)。
打开任意一张帖子,F12 确认:
xxx.com/gallery/{索引} <img class="big" data-src="xxx.jpg">步骤 3:在浏览器控制台一次性粘贴:
// 1. 告诉脚本“如何拼 URL”
const GetUrl = i => `https://xxx.com/gallery/${i}`;
// 2. 告诉脚本“如何取大图”
const GetImg = html => $(html).find('img.big').toArray().map(img => img.dataset.src);
// 3. 实例化 & 跑 10 个
const gail = new GAIL();
gail.SetFn({ GetUrlFn: GetUrl, GetImgFn: GetImg });
for(let i=1;i<=10;i++) gail.Go(i);
回车 → 右上角立刻弹出 ShowBox → 点「下载全部」→ 10 组图片秒进下载栏。
new GAIL()
创建实例,所有配置/方法都挂在实例上。
instance.SetFn({...}) —— 唯一必须调用的配置函数
参数对象可包含:
GetUrlFn(index) 【必传】返回第 index 个页面 URL(string | Promise)。 GetImgFn(htmlString) 【必传】返回图片地址,支持三种格式:img.src。 PutImgFn(imgs,index) 【可选】若提供,则「跳过」内置 ShowBox,把结果交给你自己处理。 getWay 【可选】取页面方式,默认 "ajax",可选 "fetch" 或自定义函数。 downloadWay 【可选】下载方式,默认 "GM"(即 GM_download),也可传自定义函数。instance.Go(index) —— 真正开始抓
异步函数,内部流程:
getWay 把页面拉回来; GetImgFn 拿到图片地址; PutImgFn → 自动 ShowBox.Add(imgs); console.error,不会中断循环。instance.ShowMass(msg) —— 在左上角打一条临时绿字提示,点字消失。
GM_download 实现,无 CORS 限制。 {index}_ 防止重名。 .busy 样式,可自己写 CSS 转菊花。const GetImg = html => {
// 先取 data-original,再回退 src
return $(html).find('img').toArray()
.map(img => img.dataset.original || img.src)
.filter(Boolean);
};
// 把 getWay 改成 fetch,返回 JSON
gail.SetFn({
GetUrlFn: i => `https://api.xxx.com/list?page=${i}`,
GetImgFn: json => JSON.parse(json).data.map(o => o.pic_url),
getWay: 'fetch'
});
gail.SetFn({
downloadWay: urls => {
fetch('https://myserver/batch',{
method:'POST',
body: JSON.stringify({urls}),
headers:{'Content-Type':'application/json'}
});
}
});
gail.SetFn({
PutImgFn: (imgs,idx) => {
const box = $('#myGallery').append(`<h3>第${idx}页</h3>`);
[].concat(imgs).forEach(src => box.append(`<img src="${src}" width="200">`));
}
});
Q1: 点击「下载全部」没反应?
→ 确认浏览器弹出下载栏是否被拦截;Tampermonkey 图标上是否有个小红数字(被拦截数量)。
Q2: 图片下载后文件名乱?
→ 脚本默认用 URL 最后一段做文件名。如果想自定义,在 PutImgFn 里自己调用 GM_download(url, name)。
Q3: 想中途停止?
→ 目前没做 AbortController,刷新页面即可;或把 Go 包在 setTimeout 里手动控制并发。
Q4: 会不会被封 IP?
→ 脚本本身无限速,如目标站有风控,请在外层自己加延迟/代理:
for(let i=1;i<=100;i++){ setTimeout(()=>gail.Go(i), i*1000) }
2025.09.27 v2.0
ShowMass 快捷提示; 脚本发布在 https://scriptcat.org/code/3246/,欢迎提 issue 或 PR。
作者留言:只要保留 @author 字段,可随意二开。
================================================================
说明书结束,祝你抓图愉快!