Pixiv | Danbooru | Rule34 | Yande. 一键下载各页面原图。批量下载画师作品,按作品标签下载。转换动图格式:Gif | Apng | Webp | Webm | MP4。自定义图片文件名,保存路径。保留 / 导出下载历史。
< Commentaires sur Pixiv Downloader
下载失败,单图模式时能看见下载进度(也能看见网络速度变化,雀食在下载什么东西),但是下载结束时失败,变成红叉,比如这个
多图模式时看不见下载进度,直接变成红叉,比如这个
- Firefox:107b9 (x64,develop edition)
- 扩展:可在仅安装violentmonkey的全新profile上复现
- ViolentMonkey:2.13.3
- Pixiv Downloader:0.6.1
控制台消息见附图
你好,两条反馈一并回复:
下载失败
-> 文件下载成功了,但保存失败。原因是Firefox扩展不支持下载blob,ViolentMonkey下载不支持子路径所以写的时候没加判断,下次更新改下。如果需要保存到子文件夹还是建议使用Tampermonkey。
希望增加功能:单页作品去除页码
-> 可加可不加的功能,考虑下。
你好,两条反馈一并回复:下载失败-> 文件下载成功了,但保存失败。原因是Firefox扩展不支持下载blob,ViolentMonkey下载不支持子路径所以写的时候没加判断,下次更新改下。如果需要保存到子文件夹还是建议使用Tampermonkey。
设置见附件,这样设置是保存到默认文件夹而不是子文件夹吗?但是好像还是不能下载
关于下载blob,我自己的临时凑合脚本好像是可以的,不太清楚和#1696174是不是一回事
代码如下供参考
// 弹出保存为{uid} - {user name} - {img id} - {img name}格式文件名
function GenerateDownloadWithFormattedName(imgInfo, callback){
console.log("Generate download for: %o", imgInfo);
const BLOB_CLASSNAME = "image-blob-link";
const DEFAULT_EXT = ".jpg";
const DEFAULT_MEDIA_TYPE = "image/jpeg";
// 新下载
GM_xmlhttpRequest({
method: "GET",
url: imgInfo.Src,
headers: {
referer: imgInfo.Ref
},
overrideMimeType: "text/plain; charset=x-user-defined",
onload: function(event){
// console.log("Download success: %o", event); // DEBUG.
if(callback&&typeof callback==="function"){callback(event);};
let r = event.responseText;
let binData = new Uint8Array(r.length);
let i = 0;
while (i < r.length) {
binData[i] = r.charCodeAt(i);
i++;
}
let mediaType = DEFAULT_MEDIA_TYPE;
let typeMatch = event.responseHeaders.match(/Content-Type:\s*(\w+\/([\w.+-]+))/i);
if(typeMatch && typeMatch.length == 3){
mediaType = typeMatch[1];
}
let blobURL = URL.createObjectURL(new Blob([binData], {type: mediaType}));
let ext = imgInfo.Src.match(/\.\w+$/) ? imgInfo.Src.match(/\.\w+$/)[0] : DEFAULT_EXT;
let imgBlobLink = document.createElement("a");
imgBlobLink.className = BLOB_CLASSNAME;
imgBlobLink.style.display = "none";
imgBlobLink.href = blobURL;
imgBlobLink.download = imgInfo.AuthorId + " - " + imgInfo.Author + " - " + imgInfo.IllustId + " - " + imgInfo.IllustName + ext;
// console.log("Image link: %o (%o)", imgBlobLink.download, blobURL); // DEBUG
document.body.appendChild(imgBlobLink);
imgBlobLink.click();
imgBlobLink.remove();
},
onerror: function(error){
if(callback&&typeof callback==="function"){callback(null);};
console.log("Download error: %o", error);
}
});
}
你好,两条反馈一并回复:下载失败-> 文件下载成功了,但保存失败。原因是Firefox扩展不支持下载blob,ViolentMonkey下载不支持子路径所以写的时候没加判断,下次更新改下。如果需要保存到子文件夹还是建议使用Tampermonkey。
设置见附件,这样设置是保存到默认文件夹而不是子文件夹吗?但是好像还是不能下载
关于下载blob,我自己的临时凑合脚本好像是可以的,不太清楚和#1696174是不是一回事
代码如下供参考
// 弹出保存为{uid} - {user name} - {img id} - {img name}格式文件名 function GenerateDownloadWithFormattedName(imgInfo, callback){ console.log("Generate download for: %o", imgInfo); const BLOB_CLASSNAME = "image-blob-link"; const DEFAULT_EXT = ".jpg"; const DEFAULT_MEDIA_TYPE = "image/jpeg"; // 新下载 GM_xmlhttpRequest({ method: "GET", url: imgInfo.Src, headers: { referer: imgInfo.Ref }, overrideMimeType: "text/plain; charset=x-user-defined", onload: function(event){ // console.log("Download success: %o", event); // DEBUG. if(callback&&typeof callback==="function"){callback(event);}; let r = event.responseText; let binData = new Uint8Array(r.length); let i = 0; while (i < r.length) { binData[i] = r.charCodeAt(i); i++; } let mediaType = DEFAULT_MEDIA_TYPE; let typeMatch = event.responseHeaders.match(/Content-Type:\s*(\w+\/([\w.+-]+))/i); if(typeMatch && typeMatch.length == 3){ mediaType = typeMatch[1]; } let blobURL = URL.createObjectURL(new Blob([binData], {type: mediaType})); let ext = imgInfo.Src.match(/\.\w+$/) ? imgInfo.Src.match(/\.\w+$/)[0] : DEFAULT_EXT; let imgBlobLink = document.createElement("a"); imgBlobLink.className = BLOB_CLASSNAME; imgBlobLink.style.display = "none"; imgBlobLink.href = blobURL; imgBlobLink.download = imgInfo.AuthorId + " - " + imgInfo.Author + " - " + imgInfo.IllustId + " - " + imgInfo.IllustName + ext; // console.log("Image link: %o (%o)", imgBlobLink.download, blobURL); // DEBUG document.body.appendChild(imgBlobLink); imgBlobLink.click(); imgBlobLink.remove(); }, onerror: function(error){ if(callback&&typeof callback==="function"){callback(null);}; console.log("Download error: %o", error); } }); }
附件图设置是保存到默认文件夹。
a标签下载不支持子路径,需要用GM_download,而FF的GM_download不支持blob下载。
现在的逻辑是FF + Tampermonkey直接调用GM_download下载插图,
其他情况使用GM_xmlhttpRequest然后再调用GM_downlaod下载blob(包括FF + ViolentMonkey的情况,因为可能需要转换格式),所以会失败。
后面针对ViolentMonkey加个判断就行了。
附件图设置是保存到默认文件夹。a标签下载不支持子路径,需要用GM_download,而FF的GM_download不支持blob下载。现在的逻辑是FF + Tampermonkey直接调用GM_download下载插图,其他情况使用GM_xmlhttpRequest然后再调用GM_downlaod下载blob(包括FF + ViolentMonkey的情况,因为可能需要转换格式),所以会失败。后面针对ViolentMonkey加个判断就行了。
可以下载了~
下载失败,单图模式时能看见下载进度(也能看见网络速度变化,雀食在下载什么东西),但是下载结束时失败,变成红叉,比如这个
多图模式时看不见下载进度,直接变成红叉,比如这个
控制台消息见附图