Pixiv Downloader

Pixiv | Danbooru | Rule34 | Yande. 一键下载各页面原图。批量下载画师作品,按作品标签下载。转换动图格式:Gif | Apng | Webp | Webm | MP4。自定义图片文件名,保存路径。保留 / 导出下载历史。

< Rückmeldungen auf Pixiv Downloader

Rezension: Gut - Skript funktioniert

§
Veröffentlicht: 13.11.2022

下载失败,单图模式时能看见下载进度(也能看见网络速度变化,雀食在下载什么东西),但是下载结束时失败,变成红叉,比如这个

多图模式时看不见下载进度,直接变成红叉,比如这个

  • Firefox:107b9 (x64,develop edition)
    • 扩展:可在仅安装violentmonkey的全新profile上复现
  • ViolentMonkey:2.13.3
  • Pixiv Downloader:0.6.1

控制台消息见附图

ruaruaruaVerfasser
§
Veröffentlicht: 16.11.2022

下载失败,单图模式时能看见下载进度(也能看见网络速度变化,雀食在下载什么东西),但是下载结束时失败,变成红叉,比如这个

多图模式时看不见下载进度,直接变成红叉,比如这个

  • Firefox:107b9 (x64,develop edition)
    • 扩展:可在仅安装violentmonkey的全新profile上复现
  • ViolentMonkey:2.13.3
  • Pixiv Downloader:0.6.1

控制台消息见附图



你好,两条反馈一并回复:
下载失败
-> 文件下载成功了,但保存失败。原因是Firefox扩展不支持下载blob,ViolentMonkey下载不支持子路径所以写的时候没加判断,下次更新改下。如果需要保存到子文件夹还是建议使用Tampermonkey。

希望增加功能:单页作品去除页码
-> 可加可不加的功能,考虑下。

§
Veröffentlicht: 17.11.2022
Bearbeitet: 17.11.2022

你好,两条反馈一并回复:下载失败-> 文件下载成功了,但保存失败。原因是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);
        }
    });
}
ruaruaruaVerfasser
§
Veröffentlicht: 17.11.2022

你好,两条反馈一并回复:下载失败-> 文件下载成功了,但保存失败。原因是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加个判断就行了。

§
Veröffentlicht: 18.11.2022
      附件图设置是保存到默认文件夹。a标签下载不支持子路径,需要用GM_download,而FF的GM_download不支持blob下载。现在的逻辑是FF + Tampermonkey直接调用GM_download下载插图,其他情况使用GM_xmlhttpRequest然后再调用GM_downlaod下载blob(包括FF + ViolentMonkey的情况,因为可能需要转换格式),所以会失败。后面针对ViolentMonkey加个判断就行了。  

可以下载了~

Antwort schreiben

Anmelden um eine Antwort zu senden.