Greasy Fork 支持简体中文。

NodeSeek增强

自动签到、自动滚动翻页

目前為 2023-11-10 提交的版本,檢視 最新版本

// ==UserScript==
// @name         NodeSeek增强
// @namespace    http://www.nodeseek.com/
// @version      0.1
// @description  自动签到、自动滚动翻页
// @author       dabao
// @match        *://www.nodeseek.com/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACz0lEQVR4Ae3B32tVdQAA8M85u7aVHObmzJVD0+ssiphstLEM62CBlCBEIAYhUoGGD/kiRUo+9CIEElFZgZJFSApBVhCUX2WFrVQKf5Qy26SgdK4pN7eZu+cbtyfJ/gLx83HD9SAhlEyXupiPhUSTeonRfNw1ws2aRJeN5jHcolFhJJ9M8Zj99piDTnv12SjzfzIb9dmrC7Pttt8ykjDVLsu8ZZ1GH1oqeDofJLtJh4fMEw3Y72jlCuEO2+W+sNJFr3vOZ1YIi8NIGA29hDWhGgZDJ2Rt2ZvZSBazmMUsZsPZ1qwVQmcYDNWwhtAbRsNIWJx6WLPDfgxNVkm9nR8hm+XduLba7F9RtcXztmUzyY/YJrUqNPvBYc0eSS3CwXxMl4WG7CarsyEuvU2HOkRNujSw3PosxR6DFurKxx3E/akFohPo0aDfEO61os5LdrtLVWG1TzxokifdiSH9GnTjuGhBqsWE39GOo3kVi8wsmeVW00SJ200zA9r0kFcdQzv+MKElVW/S+L5EE86pmUth3BV/SzCOCUjMVXMWzfsSYybVl1SlSlESkagpuOI1nzshFX1gyAF1UKhJEKOkJFVNXVBv+pJoBK1qBkh86z1/SaR+9o5zEgoDaloxsiSart6F1Bkl83ESHWEKvvEbqZJETaokgSH9hCk6cBLtSs6kDqEb/cZ0K+MnO0X/VdhRGUBZjzH9uA+HUl+a0BvmO+J7bVZSKWz1kehqhfe9oWalNoccDmW9JnyV+toxsy3PK3aY9Gx4gMp567ziV4WawpCXra+MEhZ5xqTtecVycxzXlxA22OK4ZYbt9LjvrM5PkNUp6zVPdNpBv1QKwt126Paxp8zwqXu8kG8pYZdHlT2Rvxo2aVG2ObyYn65UnXLKVULZZrP02ZRfCms1OmAXCSHRYqrLzuZFaDFV6s/8omuERs0Kl/LzITVTvTHDeXTD9eAftAsSYhXYOWUAAAAASUVORK5CYII=
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_notification
// @grant        unsafeWindow
// @run-at       document-end
// @license      GPL-3.0 License
// @supportURL   https://www.nodeseek.com/notification#/message?mode=talk&to=8110
// @homepageURL  https://www.nodeseek.com/post-36263-1
// ==/UserScript==

(function () {
    'use strict';
    // 检查是否登陆
    var loginStatus = false;
    if (document.querySelector('#nsk-right-panel-container>.user-card')) {
        loginStatus = true;
    }
    // 自动签到
    function autoSignIn() {
        if (!loginStatus) return
        let timeNow = new Date().getFullYear() + "/" + (new Date().getMonth() + 1) + "/" + new Date().getDate(),
            timeOld = GM_getValue('menu_signInTime');
        if (!timeOld || timeOld != timeNow) { // 是新的一天
            GM_setValue('menu_signInTime', timeNow); // 写入签到时间以供后续比较

            GM_xmlhttpRequest({
                url: '/api/attendance?random=true',
                method: 'POST',
                timeout: 4000
            });
            console.log(`[NodeSeek] 签到完成`);
            GM_notification({ text: '签到完成!积分 +22 ~', timeout: 3500 });
        }
    }
    // 自动翻页
    function pageLoading() {
        if (!/^\/(categories\/|page|$)/.test(location.pathname)) return;
        let is_requesting = false;
        windowScroll(function (direction, e) {
            if (direction === 'down') { // 下滑才准备翻页
                let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
                if (document.body.scrollHeight <= document.body.clientHeight + scrollTop + 200 && !is_requesting) {
                    let nextPage = document.querySelector('.nsk-pager .pager-cur').nextSibling;
                    if (nextPage.nodeName !== 'A') return;
                    let nextUrl = nextPage.attributes.href.value;
                    is_requesting = true;
                    fetch(nextUrl)
                        .then(res => res.text())
                        .then(data => {
                            let doc = new DOMParser().parseFromString(data, "text/html");
                            document.querySelector('ul.post-list').append(...doc.querySelector('ul.post-list').childNodes);
                            document.querySelector('div.nsk-pager.pager-top').innerHTML = doc.querySelector('div.nsk-pager.pager-top').innerHTML;
                            document.querySelector('div.nsk-pager.pager-bottom').innerHTML = doc.querySelector('div.nsk-pager.pager-bottom').innerHTML;
                            history.pushState(null, null, nextUrl);
                            is_requesting = false;
                        }).catch(reason => {
                            is_requesting = false;
                        });
                }
            }
        });
    }
    // 滚动条事件
    function windowScroll(fn1) {
        var beforeScrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop,
            fn = fn1 || function () { };
        setTimeout(function () { // 延时执行,避免刚载入到页面就触发翻页事件
            window.addEventListener('scroll', function (e) {
                var afterScrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop,
                    delta = afterScrollTop - beforeScrollTop;
                if (delta == 0) return false;
                fn(delta > 0 ? 'down' : 'up', e);
                beforeScrollTop = afterScrollTop;
            }, false);
        }, 1000)
    }
    autoSignIn();
    pageLoading();
})();