小说网站通用快捷翻页

键盘左右键或A/D键模拟点击页面中【上一页】【下一页】按钮,不存在【下一页】时尝试点击【下一章】;双击为点击【上一章】【下一章】按钮;按下键盘上下键或W/S键进行页面内平滑滚动;按下G键加入书签;自动刷新未加载的网页。主要适配偶然中文网及其套娃网站,其他类似布局网站也通用。

// ==UserScript==
// @name         小说网站通用快捷翻页
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  键盘左右键或A/D键模拟点击页面中【上一页】【下一页】按钮,不存在【下一页】时尝试点击【下一章】;双击为点击【上一章】【下一章】按钮;按下键盘上下键或W/S键进行页面内平滑滚动;按下G键加入书签;自动刷新未加载的网页。主要适配偶然中文网及其套娃网站,其他类似布局网站也通用。
// @author       coccvo
// @include      *
// @match        https://www.or77.net/*
// @match        https://www.69shuba.pro/*
// @match        https://69shuba.cx/*
// @match        https://tieba.baidu.com/*
// @exclude      https://www.bilibili.com/video/*
// @icon        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAB60lEQVR42m2SyUtbURTGT0tXbbF/QaGULoJd2C66kLYKom4UBQVnECcQMbpwEUWCA4a4CahIIk5RUYTgTkF04YSKIA44PVDEIULACVEDMUafv/AeiYqPj8c99/6+c88994r61ldamIveXJJXsff2tiAzedcliAEhky6XKz0qvjSviPCF4fL8ND8tBlTdFLTf8oGwq9ue/z56TxqWpApP2HB47M5KiDzrE3XqnXfW6p2zMsDTnGECxYBSDLG6QVGUnJhvXocA+Vad2iSD4YHG5ZWtg9gePOxDbcLCwuJCWfRn1SYPI1/8+2OhPVcqymc6HRd3j3jYx2g0Mink1mjfsOHueOM5Pf9Drso/4uEYDGoiPwEL7dPoh6uTIBhwq6eO3apiaHea8B9KSqSEI7sBD7BQujNb6hoa9cz3E3DLX1/Q9MNUXQ0GLNTXZLGEDOSGVv7I+k/p/y0cGgPth0HAAkSMIUSDarStRJYmHL7AI0sAYPpNezwe4pvtaWgtvd0g0FwCTQsZwMIGU62ZQyupf8nd+l0oN3gnvYKBtsIAhA1ch7O2kncxOdhmzf43WyGqTRfbuq9VPH1NZjDdwCNbs/xCO+3//WNxJA5rNM4/XoACHVFguoHu1idHoLrMoMxFEeYyxECf0Va1B/8EoujxAC7mNZQAAAAASUVORK5CYII=
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';


    // 自动点击刷新
    function checkAndReload() {
         var refreshDiv = document.querySelector('div[style="font-size:26px; color:#00F; cursor:hand; text-align:center;"][onclick="location.reload();"]');
        if (refreshDiv) {
            console.log("Refresh div found. Reloading the page...");
            location.reload();
        } else {
             console.log("Refresh div not found.");
        }
    }
    window.addEventListener('load', checkAndReload);
    document.addEventListener('visibilitychange', function() {
        if (document.visibilityState === 'visible') {
            checkAndReload();
        }
    });

    const SCROLL_FRACTION = 0.9; // 设置滚动距离为视口高度的百分比
    document.addEventListener('keydown', function(e) {
    // 定义一个数组包含需要处理的按键
    const keysToHandle = ['ArrowUp', 'ArrowDown', 'w', 's'];

    // 检查按键是否在需要处理的列表中,并且不在输入框内部
    if (keysToHandle.includes(e.key) && !isTargetInInput(e)) {
        // 计算滚动距离
        let distance = e.key === 'ArrowDown' || e.key === 's' ? window.innerHeight * SCROLL_FRACTION : -window.innerHeight * SCROLL_FRACTION;

        // 执行平滑滚动
        if ('scrollBehavior' in document.documentElement.style) {
            window.scrollBy({
                top: distance,
                left: 0,
                behavior: 'smooth'
            });
        } else {
            window.scrollBy(0, distance);
        }

        // 阻止按键的默认行为
        e.preventDefault();
    }
}, false);

    // 函数:检查事件目标是否在输入框内部
    function isTargetInInput(event) {
    const tagName = event.target.tagName.toLowerCase();
    return tagName === 'input' || tagName === 'textarea';
    }

    // 模拟点击函数
    function simulateClickByText(textContent) {
        // 查找所有<a>标签
        const links = document.querySelectorAll('a');
        // 遍历每个<a>标签
        for (let i = 0; i < links.length; i++) {
            // 如果文本内容匹配,则模拟点击
            if (links[i].textContent.trim() === textContent) {
                links[i].click();
                return true;
            }
        }
    return false;
    }

    // 检测是否存在下一页按钮
    function hasNextPageButton() {
        return simulateClickByText('下一页') || simulateClickByText('下一页>');
    }

    // 模拟点击书签函数
    function simulateBookmarkClick() {
        // 查找具有特定文本内容的<span>元素
        const bookmarkButton = document.querySelector('span[onclick*="AddShuQian"]');
        if (bookmarkButton) {
            console.log('Bookmark button found:', bookmarkButton);
            bookmarkButton.click();
        } else {
            console.log('Bookmark button not found.');
        }
    }

    // 双击检测变量
    let clickTimer = null;

    // 监听键盘事件
    document.addEventListener('keydown', function(e) {
        // 左键或 'a' 键(上一页)
    if (e.key === 'ArrowLeft' || e.key === 'a') {
            if (clickTimer == null) {
                clickTimer = setTimeout(function() {
                    simulateClickByText('上一页');
                    simulateClickByText('<上一页');
                    clickTimer = null;
                }, 500);
            } else {
                clearTimeout(clickTimer);
                clickTimer = null;
                simulateClickByText('上一章');
            }
        }
       // 右键或 'd' 键(下一页)
    else if (e.key === 'ArrowRight' || e.key === 'd') {
        if (clickTimer == null) {
            clickTimer = setTimeout(function() {
                if (hasNextPageButton()) {
                    // 如果存在下一页按钮,则点击
                    simulateClickByText('下一页');
                    simulateClickByText('下一页>');
                } else {
                    // 如果不存在下一页按钮,则点击下一章
                    simulateClickByText('下一章');
                }
                clickTimer = null;
            }, 500);
         }
    }

        // 'g' 键(收藏书签)
        else if (e.key === 'g') {
            simulateBookmarkClick();
        }
    }); 
})();