Greasy Fork is available in English.

哔哩哔哩图片打包下载(支持相簿和专栏

下载B站UP主Bilibili动态相册相簿图片,以及视频封面,专栏图片和UP主头像以及主页壁纸,直播间封面和直播间壁纸,然后提交给aria2或打包成zip

// ==UserScript==
// @name         哔哩哔哩图片打包下载(支持相簿和专栏
// @version      1.3.11
// @description  下载B站UP主Bilibili动态相册相簿图片,以及视频封面,专栏图片和UP主头像以及主页壁纸,直播间封面和直播间壁纸,然后提交给aria2或打包成zip
// @author       Sonic853
// @namespace    https://blog.853lab.com
// @include      https://space.bilibili.com/*
// @include      https://www.bilibili.com/h5/mall/suit/detail*
// @require      https://cdn.bootcdn.net/ajax/libs/jszip/3.6.0/jszip.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js
// @require      https://greasyfork.org/scripts/402652-aria2-rpc-edit/code/Aria2%20RPC%20Edit.js?version=971052
// @resource     BiliUI-style  https://cdn.jsdelivr.net/gh/Sonic853/Static_library/BiliUI-style.min.css?t=20200506001
// @run-at       document-end
// @license      MIT License
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// @grant        GM_getResourceText
// ==/UserScript==
// 
// 律师函收到之日,即是我死期到来之时。
// 学写代码学到现在也不过是一枚棋子,随用随弃。
// :)
// 
// https://api.vc.bilibili.com/link_draw/v1/doc/detail?doc_id=70335534
// https://api.vc.bilibili.com/link_draw/v1/doc/doc_list?uid=339679&page_num=0&page_size=541&biz=all
// https://api.vc.bilibili.com/link_draw/v1/doc/upload_count?uid=339679
(function () {
    'use strict'

    const DEV_Log = Boolean(localStorage.getItem("Dev-853"))
    const localItem = "Lab8A"
    const NAME = "相册下载"
    const Console_log = function (text) {
        let d = new Date().toLocaleTimeString()
        console.log("[" + NAME + "][" + d + "]: " + text)
    }
    const Console_Devlog = function (text) {
        let d = new Date().toLocaleTimeString()
        DEV_Log && (console.log("[" + NAME + "][" + d + "]: " + text))
    }
    const Console_error = function (text) {
        let d = new Date().toLocaleTimeString()
        console.error("[" + NAME + "][" + d + "]: " + text)
    }

    const RList = new class {
        time = 500
        #list = -1
        snooze = ms => new Promise(resolve => setTimeout(resolve, ms))
        async Push() {
            this.#list++
            await this.snooze(this.#list * this.time)
            Promise.resolve().finally(() => {
                setTimeout(() => { this.#list-- }, (this.#list + 1) * this.time)
            })
        }
    }
    if (typeof GM_xmlhttpRequest === 'undefined' && typeof GM_registerMenuCommand === 'undefined' && typeof GM_setValue === 'undefined' && typeof GM_getValue === 'undefined' && typeof GM_addStyle === 'undefined') {
        Console_error("GM is no Ready.")
    } else {
        Console_log("GM is Ready.")
    }

    let BLab8A = class {
        constructor() {
            this.data = this.load()
        }
        load() {
            Console_log("正在加载数据")
            if (typeof GM_getValue !== 'undefined') {
                let gdata = JSON.parse(GM_getValue(localItem, "{\"IP\":\"127.0.0.1\",\"Port\":6800,\"dir\":\"E:\\\\Aria2Down\\\\BiliAlbum\"}"))
                return gdata
            } else {
                let ldata = JSON.parse(localStorage.getItem(localItem) === null ? "{\"IP\":\"127.0.0.1\",\"Port\":6800,\"dir\":\"E:\\\\Aria2Down\\\\BiliAlbum\"}" : localStorage.getItem(localItem))
                return ldata
            }
        }
        save(d) {
            Console_log("正在保存数据")
            d === undefined ? (d = this.data) : (this.data = d)
            typeof GM_getValue != 'undefined' ? GM_setValue(localItem, JSON.stringify(d)) : localStorage.setItem(localItem, JSON.stringify(d))
            return this
        }
        set_aria2Client(d) {
            d === undefined ? (d = this.data) : (this.data = d)
            aria2Client = new Aria2({ host: d.IP, port: d.Port })
        }
    }
    let bLab8A = new BLab8A()
    let aria2Client = new Aria2({ host: bLab8A.data.IP, port: bLab8A.data.Port })
    let addToAria = function (url, filename, referer, cookie, headers, callback, errorcallback) {
        // Console_Devlog(bLab8A.data.dir+(!bLab8A.data.dir.endsWith("\\")?"\\":"")+uFA.uid)
        let ariaParam = {
            dir: bLab8A.data.dir + (!bLab8A.data.dir.endsWith("\\") ? "\\" : "") + uFA.uid,
            out: filename,
            referer: referer || location.href,
            'user-agent': navigator.userAgent,
            header: headers || []
        }

        if (cookie === true) cookie = document.cookie
        cookie && ariaParam.header.push('Cookie: ' + cookie)

        aria2Client.addUri(url, ariaParam, () => {
            Console_Devlog("发送到Aria2成功。")
            callback && callback()
        }, () => {
            lists.Set("发送到Aria2失败。")
            lists.BG("error")
            errorcallback && errorcallback()
        })
    }

    !DEV_Log && GM_addStyle(GM_getResourceText("BiliUI-style"))
    let HTTPsend = function (url, method, Type, successHandler, errorHandler) {
        Console_Devlog(url)
        if (typeof GM_xmlhttpRequest != 'undefined') {
            return new Promise((rl, rj) => {
                try {
                    GM_xmlhttpRequest({
                        method: method,
                        url: url,
                        responseType: Type,
                        onerror: function (response) {
                            Console_Devlog(response.status)
                            errorHandler && errorHandler(response.status)
                            rj(response.status)
                        },
                        onload: function (response) {
                            let status
                            if (response.readyState == 4) { // `DONE`
                                status = response.status
                                if (status == 200) {
                                    Console_Devlog(response.response)
                                    successHandler && successHandler(response.response)
                                    rl(response.response)
                                } else {
                                    Console_Devlog(status)
                                    errorHandler && errorHandler(status)
                                    rj(status)
                                }
                            }
                        },
                    })
                } catch (error) {
                    rj(error)
                }
            })
        } else {
            return new Promise((rl, rj) => {
                try {
                    let xhr = new XMLHttpRequest()
                    xhr.open(method, url, true)
                    xhr.withCredentials = true
                    xhr.responseType = Type
                    xhr.onreadystatechange = function () {
                        let status
                        if (xhr.readyState == 4) { // `DONE`
                            status = xhr.status
                            if (status == 200) {
                                Console_log(xhr.response)
                                successHandler && successHandler(xhr.response)
                                rl(xhr.response)
                            } else {
                                Console_log(status)
                                errorHandler && errorHandler(status)
                                rj(status)
                            }
                        }
                    }
                    xhr.send()
                } catch (error) {
                    rj(error)
                }
            })
        }
    }
    let loadToBlob = function (url, callback) {
        HTTPsend(url, "GET", "blob").then(e => {
            callback && callback(e)
        }).catch(e => {
            callback && callback(false)
        })
        // HTTPsend(url, "GET", "blob", (result) => {
        //     callback && callback(result)
        // }, () => {
        //     callback && callback(false)
        // })
    }
    let removejp14 = function (text, r) {
        text = text.substring(r.length, text.lastIndexOf(')'))
        return text
    }
    let JSON_parse = function (data) {
        let rdata
        try {
            rdata = JSON.parse(data)
        } catch (error) {
            Console_Devlog("JSON已解析,直接跳过")
            rdata = result
        }
        return rdata
    }
    let getType = function (file) {
        let filename = file
        let index1 = filename.lastIndexOf(".")
        let index2 = filename.length
        let type = filename.substring(index1, index2)
        return type
    }
    let getFileName = function (file) {
        let str = file
        str = str.substring(str.lastIndexOf("/") + 1)
        return str
    }
    let MBBtn = function (disabled) {
        document.getElementById("Bili8-UI").getElementsByClassName("MBSendToAria")[0].disabled = !disabled
        document.getElementById("Bili8-UI").getElementsByClassName("MBBlobDown")[0].disabled = !disabled
    }
    let CreactUI = function () {
        if (document.getElementById("Bili8-UI")) {
            lists.Set("加载中。。。")
            lists.BG("normal")
            document.getElementById("Bili8-UI").style.display = "block"
        } else {
            let Panel_ui = document.createElement("div")
            Panel_ui.classList.add("Bili8-UI", "Panel")
            Panel_ui.id = "Bili8-UI"

            let PanelClose_ui = document.createElement("button")
            PanelClose_ui.classList.add("Close")
            PanelClose_ui.innerText = "关闭"

            let MainList_ui = document.createElement("div")
            MainList_ui.classList.add("MainList")

            let List_ui = document.createElement("textarea")
            List_ui.classList.add("List")
            List_ui.readOnly = true
            List_ui.innerText = "加载中。。。"

            let MainBottom_ui = document.createElement("div")
            MainBottom_ui.classList.add("MainBottom")

            let IPInput_ui = document.createElement("input")
            IPInput_ui.title = "[Aria2]设置ip或域名(不带http和https)"
            IPInput_ui.placeholder = "设置ip或域名(不带http和https)"
            IPInput_ui.type = "text"
            IPInput_ui.value = bLab8A.data.IP
            IPInput_ui.classList.add("MBtn", "MBIP")

            let PortInput_ui = document.createElement("input")
            PortInput_ui.title = "[Aria2]设置端口"
            PortInput_ui.placeholder = "设置端口"
            PortInput_ui.type = "number"
            PortInput_ui.min = "1"
            PortInput_ui.max = "65536"
            PortInput_ui.value = bLab8A.data.Port
            PortInput_ui.classList.add("MBtn", "MBPort")

            let DirInput_ui = document.createElement("input")
            DirInput_ui.title = "[Aria2]设置路径"
            DirInput_ui.placeholder = "设置路径"
            DirInput_ui.type = "text"
            DirInput_ui.value = bLab8A.data.dir
            DirInput_ui.classList.add("MBtn", "MBDir")

            let SendToAria_ui = document.createElement("button")
            SendToAria_ui.classList.add("MBtn", "MBSendToAria")
            SendToAria_ui.innerText = "发送到Aria2"
            SendToAria_ui.disabled = true

            let BlobDown_ui = document.createElement("button")
            BlobDown_ui.classList.add("MBtn", "MBBlobDown")
            BlobDown_ui.innerText = "浏览器打包下载"
            BlobDown_ui.title = "将会消耗大量的内存!"
            BlobDown_ui.disabled = true

            Panel_ui.appendChild(PanelClose_ui)
            MainList_ui.appendChild(List_ui)
            Panel_ui.appendChild(MainList_ui)
            MainBottom_ui.appendChild(IPInput_ui)
            MainBottom_ui.appendChild(PortInput_ui)
            MainBottom_ui.appendChild(DirInput_ui)
            MainBottom_ui.appendChild(SendToAria_ui)
            MainBottom_ui.appendChild(BlobDown_ui)
            Panel_ui.appendChild(MainBottom_ui)
            document.body.appendChild(Panel_ui)

            SendToAria_ui.addEventListener("click", () => {
                if (!uFA.DownSend) {
                    bLab8A.data.IP = IPInput_ui.value
                    bLab8A.data.Port = Number(PortInput_ui.value)
                    bLab8A.data.dir = DirInput_ui.value
                    bLab8A.save().set_aria2Client()
                    uFA.indexA = 0
                    uFA.HaveDownFail = false
                    MBBtn(false)
                    lists.BG("running")
                    uFA.send_aria2()
                } else {
                    lists.Set("请求已经发送过去了,请勿重复点击!")
                }
            })
            BlobDown_ui.addEventListener("click", () => {
                if (!uFA.DownSend) {
                    zip = new JSZip()
                    uFA.indexA = 0
                    uFA.HaveDownFail = false
                    MBBtn(false)
                    lists.BG("running")
                    uFA.send_blob()
                } else {
                    lists.Set("请求已经发送过去了,请勿重复点击!")
                }
            })
            PanelClose_ui.addEventListener("click", () => {
                document.getElementById("Bili8-UI").style.display = "none"
            })
        }
    }
    let CreactMenu = function () {
        let Creact_G = function (Mode) {
            uFA.GetOK = false
            uFA.Mode = Mode
            uFA.index = 0
            uFA.all_count = 0
            CreactUI()
            uFA.load_all_count()
            let writeimglist = () => {
                let obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
                lists.Clear(obj)
                lists.Hide(obj)
                let zz = async () => {
                    if (uFA.imglist.length <= 1000) for (let i = 0; i < uFA.imglist.length; i++) {
                        const element = uFA.imglist[i]
                        lists.Add(element.url, obj)
                    }
                    else {
                        lists.Add("图片数量过长,在控制台显示", obj)
                        console.log(uFA.imglist)
                    }
                    MBBtn(true)
                    lists.Show(obj)
                    return
                }
                zz()
                clearInterval(t2)
            }
            let t2 = setInterval(() => {
                let index = uFA.index
                if ((uFA.GetOK || index++ >= uFA.all_count && uFA.all_count != 0) && uFA.Mode != 4) {
                    writeimglist()
                } else if (uFA.GetOK && uFA.Mode == 4 && uFA.index == 999) {
                    writeimglist()
                }
            }, 100)
        }
        if (window.location.href.startsWith("https://www.bilibili.com/h5/mall/suit/detail")) GM_registerMenuCommand("下载主题图片", () => { Creact_G(5) })
        else {
            GM_registerMenuCommand("下载相册", () => { Creact_G(0) })
            GM_registerMenuCommand("下载视频封面", () => { Creact_G(1) })
            GM_registerMenuCommand("下载头像、头图、直播封面、直播壁纸", () => { Creact_G(2) })
            GM_registerMenuCommand("下载专栏图片", () => { Creact_G(4) })
            DEV_Log && GM_registerMenuCommand("下载头衔(开发者用)", () => { Creact_G(3) })
        }
    }
    let BG_Default = [
        "1780c98271ead667b2807127ef807ceb4809c599.png",
        "e7f98439ab7d081c9ab067d248e1780bd8a72ffc.jpg",
        "f49642b3683a08e3190f29d5a095386451f8952c.jpg",
        "cd52d4ac1d336c940cc4958120170f7928d9e606.png",
        "70ce28bcbcb4b7d0b4f644b6f082d63a702653c1.png",
        "3ab888c1d149e864ab44802dea8c1443e940fa0d.png",
        "6e799ff2de2de55d27796707a283068d66cdf3f4.png",
        "24d0815514951bb108fbb360b04a969441079315.png",
        "0ad193946df21899c6cc69fc36484a7f96e22f75.png",
        "265ecddc52d74e624dc38cf0cff13317085aedf7.png",
        "6a1198e25f8764bd30d53411dac9fdf840bc3265.png",
        "9ccc0447aebf0656809b339b41aa5b3705f27c47.png",
        "8cd85a382756ab938df23a856017abccd187188e.png",
        "e22f5b8e06ea3ee4de9e4da702ce8ef9a2958f5a.png",
        "c919a9818172a8297f8b0597722f96504a1e1d88.png",
        "87277d30cd19edcec9db466a9a3e556aeb0bc0ed.png",
        "44873d3568bdcb3d850d234e02a19602972450f1.png",
        "cb1c3ef50e22b6096fde67febe863494caefebad.png"
    ]
    let LiveBG_Default = [
        "f3c1e1e22dfb1942bd88c33f1aa174efe7a38dfd.jpg",
        "2bac063036fbcf316e021fbfb8109ff3028360a6.jpg",
        "2836bb7b84c792e2c6aadfd4d1cce13484775fa3.jpg",
        "636d66a97d5f55099a9d8d6813558d6d4c95fd61.jpg",
        "2388faed3728f3396052273ad4c3c9af21c411fc.jpg",
        "785922a49980e1aa3239249c8360909488940d7d.jpg"
    ]
    let CV_Default = [
        "4adb9255ada5b97061e610b682b8636764fe50ed.png"
    ]
    let List = class {
        Get(obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            obj.innerHTML
        }
        Set(text, obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            Console_log(text)
            obj.innerHTML = text
        }
        Add(text, obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            if (obj.innerHTML == "") {
                obj.innerHTML = text
            } else {
                obj.innerHTML += "\n" + text
            }
        }
        Clear(obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            obj.innerHTML = ""
        }
        BG(status, obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            let color = "#FFFFFF"
            switch (status) {
                case "normal":
                    color = "#FFFFFF"
                    break
                case "running":
                    color = "#FFCC80"
                    break
                case "success":
                    color = "#91FFC2"
                    break
                case "error":
                    color = "#F45A8D"
                    break
                default:
                    color = "#FFFFFF"
                    break
            }
            obj.style.backgroundColor = color
        }
        Hide(obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            obj.style.display = "none"
        }
        Show(obj) {
            if (obj === undefined) {
                obj = document.getElementById("Bili8-UI").getElementsByClassName("List")[0]
            }
            obj.style.display = "block"
        }
    }
    let UFA = class {
        constructor(uid, all_count) {
            this.uid = uid
            this.name = ""
            this.all_count = all_count
            this.imglist = []
            this.index = 0
            this.indexA = 0
            this.GetOK = true
            this.DownSend = false
            this.HaveDownFail = false
            this.Mode = 0;// 0:相册 1:视频 2:头像、头图、直播封面及壁纸 3:头衔(开发者用) 4:专栏
            if (uid === undefined) {
                this.uid = this.load_uid()
            }
        }
        load_uid() {
            return window.location.pathname.split("/")[1]
        }
        load_all_count(uid, Mode) {
            if (uid === undefined) {
                uid = this.uid
            }
            if (Mode === undefined) {
                Mode = this.Mode
            }
            switch (Mode) {
                case 0:
                    {
                        HTTPsend("https://api.vc.bilibili.com/link_draw/v1/doc/upload_count?uid=" + uid, "GET", "").then(result => {
                            let rdata = JSON_parse(result)
                            if (rdata.code == 0) {
                                if (rdata.data.all_count != 0) {
                                    this.set_all_count(rdata.data.all_count, Mode)
                                } else {
                                    lists.Set("空的")
                                }
                            } else {
                                Console_error(result)
                            }
                        })
                    }
                    break
                case 1:
                    {
                        HTTPsend("https://api.bilibili.com/x/space/arc/search?mid=" + uid + "&ps=30&tid=0&pn=1&keyword=&order=pubdate", "GET", "").then(result => {
                            let rdata = JSON_parse(result)
                            if (rdata.code == 0) {
                                if (rdata.data.video != 0) {
                                    this.set_all_count(rdata.data.page.count, Mode)
                                } else {
                                    lists.Set("空的")
                                }
                            } else {
                                Console_error(result)
                            }
                        })
                    }
                    break
                case 2:
                    {
                        this.index = 0
                        this.imglist = []
                        let sendroom2 = (roomid) => {
                            HTTPsend("https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id=" + roomid, "GET", "").then(result => {
                                let rdata3 = JSON_parse(result)
                                if (rdata3.code == 0) {
                                    let cover = rdata3.data.room_info.cover
                                    let background = rdata3.data.room_info.background
                                    if (cover != "") {
                                        this.all_count++
                                        this.add_img_FBLB(cover, "livecover_" + getFileName(cover))
                                    }
                                    if (background != "" && !(background.startsWith("http://static.hdslb.com/live-static/images/bg/") || background.startsWith("https://static.hdslb.com/live-static/images/bg/") || LiveBG_Default.indexOf(getFileName(background)) != -1)) {
                                        this.all_count++
                                        this.add_img_FBLB(background, "livebg_" + getFileName(background))
                                    }
                                    this.index = this.all_count
                                } else {
                                    Console_error(result)
                                }
                            })
                        }
                        let sendroom = () => {
                            HTTPsend("https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=" + this.uid, "GET", "").then(result => {
                                let rdata = JSON_parse(result)
                                if (rdata.code == 0) {
                                    if (rdata.data.roomid != 0) {
                                        sendroom2(rdata.data.roomid)
                                    } else {
                                        this.index = this.all_count
                                    }
                                } else {
                                    this.index = this.all_count
                                    Console_error(result)
                                }
                            }).catch(() => {
                                this.index = this.all_count
                            })
                        }
                        HTTPsend("https://api.bilibili.com/x/space/acc/info?mid=" + this.uid, "GET", "").then(result => {
                            let rdata = JSON_parse(result)
                            if (rdata.code == 0) {
                                this.name = rdata.data.name
                                let face = rdata.data.face
                                let bg = rdata.data.top_photo
                                // let time = Math.round(new Date().getTime()/1000).toString()
                                this.all_count = 1
                                this.add_img_FBLB(face, "face_" + getFileName(face))
                                if (BG_Default.indexOf(getFileName(bg)) == -1) {
                                    this.all_count++
                                    this.add_img_FBLB(bg, "bg_" + getFileName(bg))
                                }
                                sendroom()
                            } else {
                                sendroom()
                                Console_error(result)
                            }
                        }).catch(() => {
                            sendroom()
                        })
                    }
                    break
                case 3:
                    {
                        HTTPsend("https://api.live.bilibili.com/rc/v1/Title/webTitles", "GET", "").then(result => {
                            let rdata = JSON_parse(result)
                            if (rdata.code == 0) {
                                if (rdata.data.length != 0) {
                                    this.set_all_count(rdata.data, Mode)
                                } else {
                                    lists.Set("空的")
                                    this.GetOK = true
                                }
                            } else {
                                Console_error(result)
                            }
                        })
                    }
                    break
                case 4:
                    {
                        HTTPsend("https://api.bilibili.com/x/space/article?mid=" + this.uid + "&pn=1&ps=12&sort=publish_time", "GET", "").then(result => {
                            // result = removejp14(result,"__jp14(")
                            let rdata = JSON_parse(result)
                            // console.log(rdata)
                            if (rdata.code == 0) {
                                if (rdata.data.count != 0) {
                                    this.set_all_count(rdata.data.count, Mode)
                                } else {
                                    lists.Set("空的")
                                    this.GetOK = true
                                }
                            } else {
                                Console_error(result)
                            }
                        })
                    }
                    break
                case 5:
                    {
                        let id = (new URL(window.location.href)).searchParams.get("id")
                        this.uid = "suit_" + id
                        HTTPsend("https://api.bilibili.com/x/garb/mall/item/suit/v2?part=suit&item_id=" + id, "GET", "").then(result => {
                            // result = removejp14(result,"__jp14(")
                            let rdata = JSON_parse(result)
                            // console.log(rdata)
                            if (rdata.code == 0) {
                                this.set_all_count(rdata.data, Mode)
                            } else {
                                Console_error(result)
                            }
                        })
                    }
                    break

                default:
                    break
            }
        }
        set_all_count(all_count, Mode) {
            if (all_count != undefined) {
                this.all_count = all_count
            }
            if (Mode === undefined) {
                Mode = this.Mode
            }
            this.load_img_list(this.uid, this.all_count, Mode)
        }
        load_img_list(uid, all_count, Mode) {
            if (uid === undefined) {
                uid = this.uid
            }
            if (all_count === undefined) {
                all_count = this.all_count
            }
            if (Mode === undefined) {
                Mode = this.Mode
            }
            switch (Mode) {
                case 0:
                    setTimeout(() => {
                        let z = 1
                        let size = 30
                        if (all_count > size) {
                            z = Math.ceil(all_count / size)
                        }
                        this.imglist = []
                        this.index = 0
                        let down = async (uid, z, size) => {
                            for (let num = 0; num < z; num++) {
                                lists.Set("正在分析第" + (1 + num).toString() + "页")
                                await RList.Push()
                                let rdata = JSON_parse(await HTTPsend(`https://api.vc.bilibili.com/link_draw/v1/doc/doc_list?uid=${uid}&page_num=${num}&page_size=${size}&biz=all`, "GET", ""))
                                Console_Devlog(rdata)
                                if (rdata.code == 0) {
                                    for (let i = 0; i < rdata.data.items.length; i++) {
                                        const element = rdata.data.items[i]
                                        if (element.count == 1) {
                                            this.add_img(element.pictures[0].img_src, element.doc_id, 0)
                                            this.index++
                                        } else if (element.count == element.pictures.length) {
                                            let cou = 0
                                            for (let k = 0; k < element.pictures.length; k++) {
                                                const element2 = element.pictures[k]
                                                this.add_img(element2.img_src, element.doc_id, cou)
                                                cou++
                                            }
                                            this.index++
                                        } else {
                                            this.load_img_detail(element.doc_id)
                                        }
                                    }
                                } else {
                                    Console_error(result)
                                }
                            }
                            Console_log("加载完成,有" + this.imglist.length + "个图片。")
                            this.GetOK = true
                            return
                        }
                        down(uid, z, size)
                    })
                    break;
                case 1:
                    setTimeout(() => {
                        let z = 1
                        if (all_count > 30) {
                            z = Math.ceil(all_count / 30)
                        }
                        this.imglist = []
                        this.index = 0
                        let time = 1
                        for (let i = 1; i <= z; i++) {
                            setTimeout(() => {
                                HTTPsend("https://api.bilibili.com/x/space/arc/search?mid=" + uid + "&ps=30&tid=0&pn=" + i + "&keyword=&order=pubdate", "GET", "", (result) => {
                                    lists.Set("正在分析第" + i.toString() + "页")
                                    let rdata = JSON_parse(result)
                                    if (rdata.code == 0) {
                                        rdata.data.list.vlist.forEach(element => {
                                            if (element.pic.startsWith("//")) {
                                                this.add_img_video("https:" + element.pic, element.aid)
                                            } else if (element.pic.startsWith("http:") || element.pic.startsWith("https:")) {
                                                this.add_img_video(element.pic, element.aid)
                                            } else {
                                                this.add_img_video(element.pic, element.aid)
                                            }
                                            this.index++
                                        })
                                    } else {
                                        Console_error(result)
                                    }
                                    i == z && setTimeout(() => { Console_log("加载完成,有" + all_count + "个图片。"); this.GetOK = true; })
                                })
                            }, time)
                            time += 450
                        }
                    })
                    break;
                case 3:
                    {
                        this.imglist = []
                        this.index = 0
                        this.all_count = all_count.length
                        all_count.forEach(e => {
                            this.add_img_FBLB(e.web_pic_url, e.identification + ".png")
                            this.index++
                        })
                        this.GetOK = true
                    }
                    break;
                case 4:
                    setTimeout(() => {
                        let z = 1
                        if (all_count > 12) {
                            z = Math.ceil(all_count / 12)
                        }
                        this.imglist = []
                        this.index = 0
                        let time = 1
                        let cvlist = []
                        let loadcvlist = () => {
                            let cvtime = 1
                            console.log(cvlist)
                            let head = '<img data-src="'.length
                            for (let i = 0; i < cvlist.length; i++) {
                                setTimeout(() => {
                                    const e = cvlist[i]
                                    HTTPsend(e.url, "GET", "", (result) => {
                                        let p = i
                                        p++
                                        lists.Set("正在分析第" + p.toString() + "个专栏里的图片")
                                        let cou = 0
                                        if (e.banner != "") {
                                            this.add_img(e.banner, e.id, cou)
                                            cou++
                                        }
                                        // let rs = result.match(/<div class=[\"|']article-holder[\"|']>(.*?)<\/div>/g)
                                        // console.log(rs)
                                        let rs = result.match(/data-src=[\"|'](.*?)[\"|']/g)
                                        Console_Devlog(rs)
                                        if(rs!==null) rs.forEach(ce => {
                                            // if (ce.startsWith("//")) {
                                            if( CV_Default.indexOf(getFileName(ce).replace('"','')) == -1 ){
                                                this.add_img("https://" + ce.split("//")[1].slice(0, -1), e.id, cou)
                                                cou++
                                            }
                                            // } else if (ce.startsWith("http:") || ce.startsWith("https:")) {
                                            //     this.add_img(ce, e.id, cou)
                                            // } else {
                                            //     this.add_img(ce, e.id, cou)
                                            // }
                                            cou++
                                        })
                                        // <img data-src="//i0.hdslb.com/bfs/article/ba284705be500ebb08b2f42a5f7cc0477780a67c.jpg" width="870" height="1200" data-size="388284"/>
                                        p == cvlist.length && setTimeout(() => { this.index = 999; this.all_count = this.imglist.length; Console_log("加载完成,有" + this.all_count + "个图片。"); this.GetOK = true; })
                                    })
                                }, cvtime)
                                cvtime += 950
                            }
                        }
                        for (let i = 1; i <= z; i++) {
                            setTimeout(() => {
                                HTTPsend("https://api.bilibili.com/x/space/article?mid=" + this.uid + "&pn=" + i + "&ps=12&sort=publish_time", "GET", "", (result) => {
                                    lists.Set("正在分析第" + i.toString() + "页")
                                    let rdata = JSON_parse(result)
                                    if (rdata.code == 0) {
                                        rdata.data.articles.forEach(element => {
                                            cvlist.push({ url: "https://www.bilibili.com/read/cv" + element.id.toString(), id: element.id, banner: element.banner_url })
                                            // this.index++
                                        })
                                    } else {
                                        Console_error(result)
                                    }
                                    i == z && setTimeout(() => { Console_log("加载完成,有" + cvlist.length.toString() + "个专栏。"); loadcvlist(); })
                                })
                            }, time)
                            time += 450
                        }
                    })
                    break;
                case 5:
                    {
                        this.imglist = []
                        this.index = 0
                        this.all_count = all_count
                        // all_count === jjjj.data
                        this.add_img_FBLB(all_count.item.properties.fan_share_image, "fan_share_image.png")
                        this.index++
                        this.add_img_FBLB(all_count.item.properties.image_cover, "image_cover.png")
                        this.index++
                        this.add_img_FBLB(all_count.item.properties.image_cover_long, "image_cover_long.png")
                        this.index++
                        this.add_img_FBLB(all_count.item.properties.image_desc, "image_desc.png")
                        this.index++

                        for (let i = 0; i < all_count.suit_items.card.length; i++) {
                            const e = all_count.suit_items.card[i]
                            this.add_img_FBLB(e.properties.image, `card_image_${i.toString()}.png`)
                            this.index++
                            if (e.properties.image_cover) {
                                this.add_img_FBLB(e.properties.image_cover, `card_image_cover_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.image_enhance) {
                                this.add_img_FBLB(e.properties.image_enhance, `card_image_enhance_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.image_enhance_frame) {
                                this.add_img_FBLB(e.properties.image_enhance_frame, `card_image_enhance_frame_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.image_preview_big) {
                                this.add_img_FBLB(e.properties.image_preview_big, `card_image_preview_big_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.image_preview_small) {
                                this.add_img_FBLB(e.properties.image_preview_small, `card_image_preview_small_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.card_bg.length; i++) {
                            const e = all_count.suit_items.card_bg[i]
                            this.add_img_FBLB(e.properties.image, `card_bg_image_${i.toString()}.png`)
                            this.index++
                            if (e.properties.image_preview_big) {
                                this.add_img_FBLB(e.properties.image_preview_big, `card_bg_image_preview_big_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.image_preview_small) {
                                this.add_img_FBLB(e.properties.image_preview_small, `card_bg_image_preview_small_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.emoji_package.length; i++) {
                            const e = all_count.suit_items.emoji_package[i]
                            this.add_img_FBLB(e.properties.image, `emoji_package_image_${i.toString()}.png`)
                            this.index++
                            for (let x = 0; x < e.items.length; x++) {
                                const el = e.items[x]
                                this.add_img_FBLB(el.properties.image, `emoji_item_image_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.loading.length; i++) {
                            const e = all_count.suit_items.loading[i]
                            if (e.properties.image_preview_small) {
                                this.add_img_FBLB(e.properties.image_preview_small, `loading_image_preview_small_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.loading_frame_url) {
                                this.add_img_FBLB(e.properties.loading_frame_url, `loading_loading_frame_url_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.loading_url) {
                                this.add_img_FBLB(e.properties.loading_url, `loading_loading_url_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.pendant.length; i++) {
                            const e = all_count.suit_items.pendant[i]
                            if (e.properties.image) {
                                this.add_img_FBLB(e.properties.image, `pendant_image_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.play_icon.length; i++) {
                            const e = all_count.suit_items.play_icon[i]
                            if (e.properties.drag_icon) {
                                this.add_img_FBLB(e.properties.drag_icon, `drag_${e.properties.drag_icon_hash}_${i.toString()}.json`)
                                this.index++
                            }
                            if (e.properties.icon) {
                                this.add_img_FBLB(e.properties.icon, `drag_icon_${e.properties.icon_hash}_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.squared_image) {
                                this.add_img_FBLB(e.properties.squared_image, `play_icon_squared_image_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.static_icon_image) {
                                this.add_img_FBLB(e.properties.static_icon_image, `play_icon_static_icon_image_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.skin.length; i++) {
                            const e = all_count.suit_items.skin[i]
                            if (e.properties.head_bg) {
                                this.add_img_FBLB(e.properties.head_bg, `skin_head_bg_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.head_myself_bg) {
                                this.add_img_FBLB(e.properties.head_myself_bg, `skin_head_myself_bg_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.head_myself_squared_bg) {
                                this.add_img_FBLB(e.properties.head_myself_squared_bg, `skin_head_myself_squared_bg_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.head_tab_bg) {
                                this.add_img_FBLB(e.properties.head_tab_bg, `skin_head_tab_bg_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image_cover) {
                                this.add_img_FBLB(e.properties.image_cover, `skin_image_cover_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image_preview) {
                                this.add_img_FBLB(e.properties.image_preview, `skin_image_preview_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.package_url) {
                                this.add_img_FBLB(e.properties.package_url, `skin_package_url_${i.toString()}.zip`)
                                this.index++
                            }
                            if (e.properties.side_bg) {
                                this.add_img_FBLB(e.properties.side_bg, `skin_side_bg_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.side_bg_bottom) {
                                this.add_img_FBLB(e.properties.side_bg_bottom, `skin_side_bg_bottom_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.tail_bg) {
                                this.add_img_FBLB(e.properties.tail_bg, `skin_tail_bg_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_channel) {
                                this.add_img_FBLB(e.properties.tail_icon_channel, `skin_tail_icon_channel_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_dynamic) {
                                this.add_img_FBLB(e.properties.tail_icon_dynamic, `skin_tail_icon_dynamic_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_main) {
                                this.add_img_FBLB(e.properties.tail_icon_main, `skin_tail_icon_main_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_myself) {
                                this.add_img_FBLB(e.properties.tail_icon_myself, `skin_tail_icon_myself_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_selected_channel) {
                                this.add_img_FBLB(e.properties.tail_icon_selected_channel, `skin_tail_icon_selected_channel_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_selected_dynamic) {
                                this.add_img_FBLB(e.properties.tail_icon_selected_dynamic, `skin_tail_icon_selected_dynamic_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_selected_main) {
                                this.add_img_FBLB(e.properties.tail_icon_selected_main, `skin_tail_icon_selected_main_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_selected_myself) {
                                this.add_img_FBLB(e.properties.tail_icon_selected_myself, `skin_tail_icon_selected_myself_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_selected_shop) {
                                this.add_img_FBLB(e.properties.tail_icon_selected_shop, `skin_tail_icon_selected_shop_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.tail_icon_shop) {
                                this.add_img_FBLB(e.properties.tail_icon_shop, `skin_tail_icon_shop_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.space_bg.length; i++) {
                            const e = all_count.suit_items.space_bg[i]
                            if (e.properties.fan_no_image) {
                                this.add_img_FBLB(e.properties.fan_no_image, `spacebg_fan_no_image_${i.toString()}.png`)
                                this.index++
                            }
                            if (e.properties.image1_landscape) {
                                this.add_img_FBLB(e.properties.image1_landscape, `spacebg_image1_landscape_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image1_portrait) {
                                this.add_img_FBLB(e.properties.image1_portrait, `spacebg_image1_portrait_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image2_landscape) {
                                this.add_img_FBLB(e.properties.image2_landscape, `spacebg_image2_landscape_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image2_portrait) {
                                this.add_img_FBLB(e.properties.image2_portrait, `spacebg_image2_portrait_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image3_landscape) {
                                this.add_img_FBLB(e.properties.image3_landscape, `spacebg_image3_landscape_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image3_portrait) {
                                this.add_img_FBLB(e.properties.image3_portrait, `spacebg_image3_portrait_${i.toString()}.jpg`)
                                this.index++
                            }
                        }
                        for (let i = 0; i < all_count.suit_items.thumbup.length; i++) {
                            const e = all_count.suit_items.thumbup[i]
                            if (e.properties.image_ani) {
                                this.add_img_FBLB(e.properties.image_ani, `thumbup_image_ani_${i.toString()}.bin`)
                                this.index++
                            }
                            if (e.properties.image_ani_cut) {
                                this.add_img_FBLB(e.properties.image_ani_cut, `thumbup_image_ani_cut_${i.toString()}.bin`)
                                this.index++
                            }
                            if (e.properties.image_bright) {
                                this.add_img_FBLB(e.properties.image_bright, `thumbup_image_bright_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image_dim) {
                                this.add_img_FBLB(e.properties.image_dim, `thumbup_image_dim_${i.toString()}.jpg`)
                                this.index++
                            }
                            if (e.properties.image_preview) {
                                this.add_img_FBLB(e.properties.image_preview, `thumbup_image_preview_${i.toString()}.png`)
                                this.index++
                            }
                        }
                        if (all_count.fan_user.avatar) {
                            this.add_img_FBLB(all_count.fan_user.avatar, `fan_user_${all_count.fan_user.mid.toString()}.png`)
                            this.index++
                        }
                        this.all_count = this.index
                    }
                    break;
                default:
                    break;
            }
            // if (Mode == 0) {
            // } else if (Mode == 1) {
            // } else if (Mode == 3) {
            // } else if (Mode == 4) {
            // }
        }
        load_img_detail(doc_id) {
            HTTPsend("https://api.vc.bilibili.com/link_draw/v1/doc/detail?doc_id=" + doc_id, "GET", "", (result) => {
                let rdata = JSON_parse(result)
                if (rdata.code == 0) {
                    let cou = 0
                    rdata.data.item.pictures.forEach(element => {
                        this.add_img(element.img_src, doc_id, cou)
                        cou++
                    })
                    this.index++
                } else {
                    Console_error(result)
                }
            })

        }
        add_img(url, doc_id, cou) {
            this.imglist.push({ url: url, doc_id: doc_id, cou: cou })
        }
        add_img_video(url, aid) {
            this.imglist.push({ url: url, aid: aid })
        }
        add_img_FBLB(url, name) {
            this.imglist.push({ url: url, name: name })
        }
        send_aria2() {
            this.DownSend = true
            let indexA = this.indexA
            indexA++
            Console_Devlog(indexA + "," + this.imglist.length)
            if (indexA <= this.imglist.length) {
                lists.Set("正在发送第" + indexA + "张图片。")
                switch (this.Mode) {
                    case 0:
                        {
                            let url = this.imglist[this.indexA].url
                            let doc_id = this.imglist[this.indexA].doc_id.toString()
                            let cou = this.imglist[this.indexA].cou.toString()
                            setTimeout(() => {
                                addToAria([url], doc_id + "_" + cou + getType(url), "https://h.bilibili.com/" + doc_id, true, [], () => {
                                    // bug: 此处没法执行callback
                                }, () => {
                                    lists.Set("发送到Aria2失败了,请检查相关设置吧。。。。")
                                })
                                uFA.indexA++
                                uFA.send_aria2()
                            }, 5)
                        }
                        break;
                    case 1:
                        {
                            let url = this.imglist[this.indexA].url
                            let aid = this.imglist[this.indexA].aid.toString()
                            setTimeout(() => {
                                addToAria([url], "av" + aid + "_" + getFileName(url), "https://space.bilibili.com/" + this.uid + "/video", true, [], () => {
                                    // bug: 此处没法执行callback
                                }, () => {
                                    lists.Set("发送到Aria2失败了,请检查相关设置吧。。。。")
                                })
                                uFA.indexA++
                                uFA.send_aria2()
                            }, 5)
                        }
                        break;
                    case 2:
                        {
                            let url = this.imglist[this.indexA].url
                            let name = this.imglist[this.indexA].name
                            setTimeout(() => {
                                addToAria([url], name, "https://space.bilibili.com/" + this.uid + "/video", true, [], () => {
                                    // bug: 此处没法执行callback
                                }, () => {
                                    lists.Set("发送到Aria2失败了,请检查相关设置吧。。。。")
                                })
                                uFA.indexA++
                                uFA.send_aria2()
                            }, 5)
                        }
                        break;
                    case 4:
                        {
                            let url = this.imglist[this.indexA].url
                            let doc_id = this.imglist[this.indexA].doc_id.toString()
                            let cou = this.imglist[this.indexA].cou.toString()
                            setTimeout(() => {
                                addToAria([url], "cv" + doc_id + "_" + cou + "_" + getFileName(url), "https://www.bilibili.com/read/cv" + doc_id, true, [], () => {
                                    // bug: 此处没法执行callback
                                }, () => {
                                    lists.Set("发送到Aria2失败了,请检查相关设置吧。。。。")
                                })
                                uFA.indexA++
                                uFA.send_aria2()
                            }, 5)
                        }
                        break;
                    case 5:
                        {
                            let url = this.imglist[this.indexA].url
                            let name = this.imglist[this.indexA].name
                            setTimeout(() => {
                                addToAria([url], name, "https://www.bilibili.com/h5/mall/suit/detail?navhide=1&id=" + this.uid.replace("suit_", "") + "&from=official", true, [], () => {
                                    // bug: 此处没法执行callback
                                }, () => {
                                    lists.Set("发送到Aria2失败了,请检查相关设置吧。。。。")
                                })
                                uFA.indexA++
                                uFA.send_aria2()
                            }, 5)
                        }
                        break;
                    default:
                        break;
                }
            } else {
                this.DownSend = false
                MBBtn(true)
                lists.Set("发送完成。")
                lists.BG("success")
            }
        }
        async send_blob() {
            this.DownSend = true
            let indexA = this.indexA
            indexA++
            if (indexA <= this.imglist.length) {
                lists.Set("正在获取第" + indexA + "张图片。")
                await RList.Push()
                switch (this.Mode) {
                    case 0:
                        {
                            let url = this.imglist[this.indexA].url
                            let doc_id = this.imglist[this.indexA].doc_id.toString()
                            let cou = this.imglist[this.indexA].cou.toString()
                            setTimeout(() => {
                                loadToBlob(url, (blobFile) => {
                                    if (blobFile) {
                                        zip.file(doc_id + "_" + cou + getType(url), blobFile, { binary: true })
                                        this.indexA++
                                        uFA.send_blob()
                                    } else {
                                        this.HaveDownFail = true
                                        Console_error("相簿 https://h.bilibili.com/" + doc_id + " 下的第 " + cou + " 张图片下载失败了。。。")
                                        this.indexA++
                                        uFA.send_blob()
                                    }
                                })
                            }, 100)
                        }
                        break;
                    case 1:
                        {
                            let url = this.imglist[this.indexA].url
                            let aid = this.imglist[this.indexA].aid.toString()
                            setTimeout(() => {
                                loadToBlob(url, (blobFile) => {
                                    if (blobFile) {
                                        zip.file("av" + aid + "_" + getFileName(url), blobFile, { binary: true })
                                        this.indexA++
                                        uFA.send_blob()
                                    } else {
                                        this.HaveDownFail = true
                                        Console_error("视频 https://www.bilibili.com/video/av" + aid + " 的封面下载失败了。。。")
                                        this.indexA++
                                        uFA.send_blob()
                                    }
                                })
                            }, 100)
                        }
                        break;
                    case 2:
                    case 3:
                    case 5:
                        {
                            let url = this.imglist[this.indexA].url
                            let name = this.imglist[this.indexA].name
                            setTimeout(() => {
                                loadToBlob(url, (blobFile) => {
                                    if (blobFile) {
                                        zip.file(name, blobFile, { binary: true })
                                        this.indexA++
                                        uFA.send_blob()
                                    } else {
                                        this.HaveDownFail = true
                                        Console_error("图片 " + url + " 下载失败了。。。")
                                        this.indexA++
                                        uFA.send_blob()
                                    }
                                })
                            }, 100)
                        }
                        break;
                    case 4:
                        {
                            let url = this.imglist[this.indexA].url
                            let doc_id = this.imglist[this.indexA].doc_id.toString()
                            let cou = this.imglist[this.indexA].cou.toString()
                            setTimeout(() => {
                                loadToBlob(url, (blobFile) => {
                                    if (blobFile) {
                                        zip.file("cv" + doc_id + "_" + cou + "_" + getFileName(url), blobFile, { binary: true })
                                        this.indexA++
                                        uFA.send_blob()
                                    } else {
                                        this.HaveDownFail = true
                                        Console_error("专栏 https://www.bilibili.com/read/cv" + doc_id + " 下的第 " + cou + " 张图片下载失败了。。。")
                                        this.indexA++
                                        uFA.send_blob()
                                    }
                                })
                            }, 100)
                        }
                        break;
                    // case 5:

                    //     break;
                    default:
                        break;
                }
            } else {
                let result = ""
                let rdata = {}
                let name = ""
                if (uFA.Mode != 5 || uFA.Mode != 3) {
                    result = await HTTPsend("https://api.bilibili.com/x/space/acc/info?mid=" + uFA.uid, "GET")
                    rdata = JSON_parse(result)
                    if (rdata.code == 0) {
                        this.name = rdata.data.name
                        name = this.name
                    }
                }
                zip.generateAsync({ type: "blob" }).then((content) => {
                    // see FileSaver.js
                    let zipname = name + "_" + this.uid
                    switch (this.Mode) {
                        case 0:
                            {
                                zipname += "_相册"
                            }
                            break;
                        case 1:
                            {
                                zipname += "_视频封面"
                            }
                            break;
                        case 2:
                            {
                                zipname += "_头图及壁纸"
                            }
                            break;
                        case 3:
                            {
                                zipname += "_头衔"
                            }
                            break;
                        case 4:
                            {
                                zipname += "_专栏"
                            }
                            break;
                        case 5:
                            {
                                zipname += "_主题"
                            }
                            break;

                        default:
                            break;
                    }
                    lists.Set("正在打包成 " + zipname + ".zip 中")
                    saveAs(content, zipname + ".zip")
                    // let a = document.createElement('a')
                    // a.innerHTML = zipname
                    // a.download = zipname
                    // a.href = URL.createObjectURL(content)
                    // a.addEventListener("click", function () { document.body.removeChild(a) })
                    // document.body.appendChild(a)
                    // a.click()
                    this.DownSend = false
                    MBBtn(true)
                    if (!this.HaveDownFail) {
                        lists.Set("打包 " + zipname + ".zip 完成。")
                        lists.BG("success")
                    } else {
                        lists.Set("打包 " + zipname + ".zip 完成,但有些文件下载失败了,详细请查看控制台orz")
                        lists.BG("error")
                    }
                })
            }
        }
    }
    let zip = new JSZip()
    let uFA = new UFA()
    CreactMenu()
    // CreactUI()
    // document.getElementById("Bili8-UI").style.display = "none"
    // ↑我觉得没必要加载完就加载这玩意。。。
    let lists = new List()
})()