// ==UserScript== // @name 自动续页 // @namespace http://danielnav.wuaze.com/nav // @version 1.0.0 // @description 免去手动翻页的麻烦,适配更多网站 // @author DANIEL|Sagehub // @icon https://www.appinn.com/wp-content/uploads/Appinn-icon-32.jpg // @match *://*/* // @contributionURL https://scriptcat.org/api/v2/resource/image/rtYcOQbW7tLKaAJ6 // ==/UserScript== (function() { 'use strict'; let isObserving = false; let hasClicked = false; // 监视页面上的变化,并在适当的时候加载下一页 function startObserving() { if (!isObserving) { const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.addedNodes.length > 0) { // 检查新加载的内容是否包含分页元素 if (document.querySelectorAll('.pagination, .pager, .page-numbers').length > 0) { // 如果存在分页元素,检查是否需要加载下一页 if (shouldLoadNextPage()) { loadNextPage(); } } } }); }); // 根据实际需要调整配置 const config = { childList: true, subtree: true, attributes: false, characterData: false }; observer.observe(document.body, config); isObserving = true; } } // 检查是否需要加载下一页 function shouldLoadNextPage() { // 判断是否存在 "下一页" 或者 "尾页" 链接 const nextLink = document.querySelector('.pagination .next, .pager .next, .page-numbers.dots + .page-numbers'); if (nextLink && !nextLink.classList.contains('disabled') && !nextLink.classList.contains('hide')) { // 避免连续点击 if (!hasClicked) { hasClicked = true; return true; } } else { // 重置状态 hasClicked = false; } return false; } // 加载下一页 function loadNextPage() { // 触发下一页加载的逻辑,这里假设下一页链接是可点击的 const nextLink = document.querySelector('.pagination .next, .pager .next, .page-numbers.dots + .page-numbers'); if (nextLink) { simulateClick(nextLink); } } // 模拟点击事件,以兼容那些通过点击事件触发加载的网站 function simulateClick(element) { const event = new MouseEvent('click', { bubbles: true, cancelable: true, view: window }); element.dispatchEvent(event); } // 添加一个延迟来确保页面完全加载后再进行操作 setTimeout(() => { startObserving(); if (shouldLoadNextPage()) { loadNextPage(); } }, 100); // 延时0.1秒,可根据实际情况调整 })();