Greasy Fork

通用_自动签到

自动或半自动地签到。

当前为 2023-06-21 提交的版本,查看 最新版本

// ==UserScript==
// @name               通用_自动签到
// @name:zh-CN         通用_自动签到
// @name:en-US         Uni_Auto sign
// @description        自动或半自动地签到。
// @version            3.0.0
// @author             LiuliPack
// @license            WTFPL
// @namespace          https://gitlab.com/LiuliPack/UserScript
// @match              *://*/*
// @supportURL         https://gitlab.com/liulipack/UserScript
// @grant              GM_registerMenuCommand
// @run-at             document-idle
// ==/UserScript==

/* 参数示范 / Config demo
{
    "remark": "备注",
    "url": "网址",
    "check": {
        "mode": ["0:元素属性", "1:元素文本", "2:元素存在"],
        "element": "元素选择器",
        "data": ["元素文本或元素属性键", "元素属性值"]
    },
    "sign": [
        {
            "remark": "备注",
            "data": "元素选择器",
            "data": () => { // 自定义脚本 },
            "delay": "0",
            "last": ["false:不是最后一步", "true:是最后一步"]
        }
    ],
    "refresh": "刷新页面",
    "close": "关闭页面"
},
{
    "remark": "Remarks",
    "url": "URL",
    "check": {
        "mode": ["0:Element Properties", "1:Element Text", "2:Element Existence"],
        "element": "Element Selector",
        "data": ["Element text or element attribute key", "Element attribute value"]
    },
    "sign": [
        {
            "remark": "Remarks",
            "data": "Element Selector",
            "data": () => { // Custom Script },
            "delay": "0",
            "last": ["false: Not the last step", "true: Is the last step"]
        }
    ],
    "refresh": "Refresh page",
    "close": "Close page"
}
*/

'use strict';

// 定义参数(config)和网页链接(URL)变量;快捷元素选择($('元素'))和关闭页面(close())函数。
let config = [
    {
        "remark": "Anime 字幕论坛_签到插件",
        "url": "https://bbs.acgrip.com/dsu_paulsign-sign.html",
        "check": {
            "mode": 2,
            "element": "#shuai_menu + table .tac a"
        },
        "sign": [
            {
                "remark": "选择心情",
                "data": "#yl",
                "delay": 0,
                "last": false
            },
            {
                "remark": "勾选不填写留言",
                "data": "#qiandao > table.tfm > tbody > tr:nth-child(1) > td > label:nth-child(3) > input[type=radio]",
                "delay": 0,
                "last": false
            },
            {
                "remark": "执行签到",
                "data": "#shuai_menu + table .tac a",
                "delay": 0,
                "last": true
            }
        ],
        "refresh": false,
        "close": true
    },
    {
        "remark": "Anime 字幕论坛_Discuz 任务",
        "url": "https://bbs.acgrip.com/home.php?mod=task",
        "check": {
            "mode": 2,
            "element": "#ct a[href='home.php?mod=task&do=apply&id=1']",
        },
        "sign": [
            {
                "remark": "执行签到",
                "data": "#ct a[href='home.php?mod=task&do=apply&id=1']",
                "delay": 0,
                "last": true
            }
        ],
        "refresh": false,
        "close": true
    },
    {
        "remark": "2DFun",
        "url": "https://2dfan.com/",
        "check": {
            "mode": 2,
            "element": "#do_checkin"
        },
        "sign": [
            {
                "remark": "执行签到",
                "data": "#do_checkin",
                "delay": 0,
                "last": true
            }
        ],
        "refresh": true,
        "close": true
    },
    {
        "remark": "南+_接任务",
        "url": "https://www.south-plus.net/plugin.php?H_name-tasks.html.html",
        "check": {
            "mode": 0,
            "element": "#p_15 a",
            "data": ["title", "按这申请此任务"]
        },
        "sign": [
            {
                "remark": "接每日任务",
                "data": "#p_15 a",
                "delay": "0",
                "last": false
            },
            {
                "remark": "接每周任务",
                "data": "#p_14 a",
                "delay": "0",
                "last": false
            },
            {
                "remark": "前往完成任务页面",
                "data": () => { window.open('https://www.south-plus.net/plugin.php?H_name-tasks-actions-newtasks.html.html', "_self") },
                "delay": 3,
                "last": true
            }
        ],
        "refresh": false,
        "close": true
    },
    {
        "remark": "南+_完成任务",
        "url": "https://www.south-plus.net/plugin.php?H_name-tasks-actions-newtasks.html.html",
        "check": {
            "mode": 0,
            "element": "#both_15 a",
            "data": ["title", "领取此奖励"]
        },
        "sign": [
            {
                "remark": "完成每日任务",
                "data": "#both_15 a",
                "delay": "0",
                "last": false
            },
            {
                "remark": "完成每周任务",
                "data": "#both_14 a",
                "delay": "0",
                "last": true
            }
        ],
        "refresh": false,
        "close": true
    },
    {
        "remark": "绯月",
        "url": "https://bbs.kfpromax.com/kf_growup.php",
        "check": {
            "mode": 2,
            "element": ".gro_divhui:nth-child(5) + div a:not(a[href=\"javascript:;\"])"
        },
        "sign": [
            {
                "remark": "执行签到",
                "data": ".gro_divhui:nth-child(5) + div a:not(a[href=\"javascript:;\"])",
                "delay": 0,
                "last": true
            }
        ],
        "refresh": false,
        "close": true
    },
    {
        "remark": "绅士仓库",
        "url": "https://cangku.moe/",
        "check": {
            "mode": 1,
            "element": ".footer li:nth-child(2) a",
            "data": ["签到"]
        },
        "sign": [
            {
                "remark": "执行签到",
                "data": ".footer li:nth-child(2) a",
                "delay": 0,
                "last": true
            }
        ],
        "refresh": false,
        "close": false
    },
    {
        "remark": "紳士の庭",
        "url": "https://gmgard.moe/",
        "check": {
            "mode": 1,
            "element": "#checkw",
            "data": ["点此签到"]
        },
        "sign": [
            {
                "remark": "执行签到",
                "data": "#checkin",
                "delay": 0,
                "last": true
            }
        ],
        "refresh": false,
        "close": false
    }
],
    URL = location.href,
    $ = ele => document.querySelector(ele);
function close() {
    window.close();
};

// 等待 5 秒
setTimeout(() => {

    // 遍历配置信息
    config.forEach(data => {

        // 如果链接匹配且未签到
        if(URL === data.url && data.check.mode === 0 && $(data.check.element)?.getAttribute(data.check.data[0]) === data.check.data[1] ||
           URL === data.url && data.check.mode === 1 && $(data.check.element)?.textContent === data.check.data[0] ||
           URL === data.url && data.check.mode === 2 && $(data.check.element)) {

            // 执行签到
            data.sign.forEach(data => {

                // 等待延时
                setTimeout(() => {

                    // 判断模式并执行对应操作
                    typeof data.data === "string" ? $(data.data)?.click() : data.data() ;

                    // 如果是最后一步
                    if(data.last) {

                        // 根据参数刷新和关闭
                        data.refresh ? location.reload() : 0 ;
                        setTimeout(() => { data.close ? close() : 0 ; }, 500);

                    }

                }, data.delay * 1000);

            });

        }else if(URL === data.url) {

            // 根据参数刷新和关闭
            data.refresh ? location.reload() : 0 ;
            setTimeout(() => { data.close ? close() : 0 ; }, 500);

        }

    });

}, 5000);