BepisDB卡片下载器

自动下载BepisDB的卡片

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name        BepisDB卡片下载器
// @namespace   蒋晓楠
// @version     20230820
// @description 自动下载BepisDB的卡片
// @author      蒋晓楠
// @license     MIT
// @match       https://db.bepis.moe/*
// @icon        https://www.google.com/s2/favicons?sz=64&domain=bepis.moe
// @grant GM_notification
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_registerMenuCommand
// @grant GM_openInTab
// ==/UserScript==
//下载间隔,单位毫秒
const DOWNLOAD_INTERVAL_PER_CARD = 500;//下载每个卡片的间隔,设置太短会出问题
const DOWNLOAD_INTERVAL_PER_PAGE = 3000;//下载每个页面的间隔,设置太短会出问题
//下载状态
const DOWNLOAD_STATUS_STOP = 0;//停止
const DOWNLOAD_STATUS_RUN = 1;//正在下载
//修改配置
function SetConfig(Key, Value) {
    GM_setValue("Config:" + Key, Value);
}

//获取配置
function GetConfig(Key, Default) {
    return GM_getValue("Config:" + Key, Default);
}

//提醒
function Tips(Message) {
    GM_notification({title: "BepisDB卡片下载器", text: Message, timeout: 3000});
}

//获取下载状态
function GetDownloadStatus() {
    return GetConfig("DownloadStatus", DOWNLOAD_STATUS_STOP);
}

//设置下载状态
function SetDownloadStatus(Status) {
    SetConfig("DownloadStatus", Status);
}

//获取当前页码
function GetNowPageNumber() {
    let Element = document.querySelector(".page-item.active .page-link");
    if (Element === null) {
        return -1;
    } else {
        return parseInt(Element.textContent);
    }
}

function DownloadCard() {
    let NowPageNumber = GetNowPageNumber();
    if (NowPageNumber === -1) {
        SetDownloadStatus(DOWNLOAD_STATUS_STOP);
        Tips("当前可能不是卡片列表页面,无法下载");
    } else {
        console.log("开始下载");
        SetDownloadStatus(DOWNLOAD_STATUS_RUN);
        console.log(`当前是第${NowPageNumber}页`);
        let Lists = document.querySelectorAll(".card-block .logo .btn-primary");
        for (let i = 0; i < Lists.length; i++) {
            let Card = Lists[i];
            setTimeout(function () {
                console.log("下载" + Card.href);
                GM_openInTab(Card.href);
                if (i + 1 === Lists.length) {
                    if (NowPageNumber > 1) {
                        console.log("当前页面下载完成");
                        let PreviousPageLink = document.querySelector(".page-item.active").previousElementSibling.querySelector("a").href;
                        console.log(PreviousPageLink)
                        setTimeout(function () {
                            location.href = PreviousPageLink;
                        }, DOWNLOAD_INTERVAL_PER_PAGE);
                    } else {
                        SetDownloadStatus(DOWNLOAD_STATUS_STOP);
                        Tips("全部下载完成");
                    }
                }
            }, i * DOWNLOAD_INTERVAL_PER_CARD);
        }
    }
}

function InitUI() {
    GM_registerMenuCommand(GetDownloadStatus() === DOWNLOAD_STATUS_STOP ? "开始下载" : "停止下载", function () {
        let DownloadStatus = GetDownloadStatus();
        if (DownloadStatus === DOWNLOAD_STATUS_STOP) {
            DownloadCard();
        } else {
            SetDownloadStatus(DOWNLOAD_STATUS_STOP);
        }
    });
}

function Run() {
    InitUI();
    if (GetDownloadStatus() === DOWNLOAD_STATUS_RUN) {
        DownloadCard();
    }
}

Run();