您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动签到、自动滚动翻页
当前为
// ==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(); })();