自动浏览linux.do,autoBrowse-linux.do

自动浏览linux.do的帖子和话题,随机浏览时间,随机滚动距离,看1个小时休息10分钟,Automatically browse posts in linux.do

// ==UserScript==
// @name        自动浏览linux.do,autoBrowse-linux.do
// @description 自动浏览linux.do的帖子和话题,随机浏览时间,随机滚动距离,看1个小时休息10分钟,Automatically browse posts in linux.do
// @namespace   Violentmonkey Scripts
// @match       https://linux.do/*
// @grant       none
// @version     1.1.12
// @author      quantumcat
// @license      MIT
// @icon         https://www.google.com/s2/favicons?domain=linux.do
// ==/UserScript==
function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

var scrollInterval;
var pauseTimeout;
var isScrolling = false;
var accumulatedScrollTime = parseInt(localStorage.getItem('accumulatedScrollTime')) || 0;
var lastActionTime;

function navigateNextTopic() {
    const URLS = [
        // "https://linux.do/new",
                //   "https://linux.do/unread",
                  // "https://linux.do/c/general/4/l/latest",
                //   "https://linux.do/hot",
                  "https://linux.do/top",
                  "https://linux.do/latest",
                //   "https://linux.do/unseen",
                  "https://linux.do/latest?ascending=false&order=posts"
                  ];
    const randomIndex = Math.floor(Math.random() * URLS.length);
    const newURL = URLS[randomIndex];
    console.log("Navigating to new URL: " + newURL);
    window.location.href = newURL;
}

function startScrolling() {
    if (isScrolling) return;
    isScrolling = true;
    button.textContent = "停止";
    button.disabled = false;
    lastActionTime = Date.now();

    var speed = getRandomArbitrary(6, 10);
    scrollInterval = setInterval(function() {
        var scrollDistance = getRandomArbitrary(1, 5);
        window.scrollBy(0, scrollDistance);
        var scrollHeight = document.documentElement.scrollHeight;
        var totalScroll = window.innerHeight + window.scrollY;
        // console.log("Scroll Height: " + scrollHeight);
        // console.log("Total Scroll: " + totalScroll);
        accumulateScrollTime();
        if ((totalScroll + 1) >= scrollHeight) {
            console.log("Reached bottom. Navigating to new URL...");
            clearInterval(scrollInterval);
            navigateNextTopic();
        }
    }, speed);

    var scrollDuration = getRandomArbitrary(800, 1200);
    pauseTimeout = setTimeout(function() {
        var pauseDuration = getRandomArbitrary(600, 1000);
        accumulateScrollTime();
        clearInterval(scrollInterval);
        isScrolling = false;
        setTimeout(startScrolling, pauseDuration);
    }, scrollDuration);
}

function stopScrolling() {
    clearInterval(scrollInterval);
    clearTimeout(pauseTimeout);
    isScrolling = false;
    button.textContent = "开始";
    button.disabled = false;
}

function accumulateScrollTime() {
    var now = Date.now();
    accumulatedScrollTime += now - lastActionTime;
    localStorage.setItem('accumulatedScrollTime', accumulatedScrollTime);
    // console.log('accumulatedScrollTime: ' + accumulatedScrollTime)
    lastActionTime = now;

    if (accumulatedScrollTime >= 3600000) { // 1 hour in milliseconds
        accumulatedScrollTime = 0;
        localStorage.setItem('accumulatedScrollTime', accumulatedScrollTime);
        pauseForTenMinutes();
    }
}

function findLinkAndRedirect() {
    const topicPattern = "/t/topic";
    var links = document.links;
    var matchingLinks = [];
    for (var i = 0; i < links.length; i++) {
        if (links[i].href.indexOf(topicPattern) !== -1) {
            matchingLinks.push(links[i].href);
        }
        if (matchingLinks.length == 8) { // 找8个链接,随机挑一个
            break;
        }
    }

    if (matchingLinks.length > 0) {
        var randomIndex = Math.floor(Math.random() * matchingLinks.length);
        var newLocation = matchingLinks[randomIndex];

        // 滚动页面
        var speed = getRandomArbitrary(6, 10);
        var scrollInterval = setInterval(function() {
            var scrollDistance = getRandomArbitrary(1, 5);
            window.scrollBy(0, scrollDistance);  // 每次滚动像素
            clearInterval(scrollInterval);
        }, speed);  // 每1秒滚动一次

        // 延长停顿时间,等待滚动结束后再跳转
        var pauseDuration = getRandomArbitrary(1600, 3000);
        setTimeout(function() {
            window.location.href = newLocation;
        }, pauseDuration);  // 2秒后跳转
    }
}

function setButtonDisabled() {
    button.textContent = "导航中";
    button.style.color = "#f0f0f0";
    button.disabled = true;
}

function pauseForTenMinutes() {
    stopScrolling();
    console.log("Pausing for 10 minutes...");
    setTimeout(function() {
        console.log("Resuming after pause...");
        startScrolling();
    }, 10 * 60 * 1000); // 10 minutes in milliseconds
}

// 添加“开始/停止”按钮
var button = document.createElement("button");
button.style.position = "fixed";
button.style.right = "15%";
button.style.bottom = "30%";
button.style.transform = "translateY(-50%)";
button.style.padding = "10px 20px";
button.style.fontSize = "20px";
button.style.backgroundColor = "white"; // 白色背景
button.style.border = "1px solid #ddd"; // 浅灰色边框
button.style.borderRadius = "5px"; // 圆角
button.style.color = "black";
button.textContent = "开始";
document.body.appendChild(button);

button.addEventListener("click", function() {
    if (isScrolling) {
        stopScrolling();
    } else {
        startScrolling();
    }
});

if (window.location.href.indexOf("/t/topic/") != -1) {
    // 如果在主题页面,默认就开始滚动
    startScrolling();
} else {
    findLinkAndRedirect();
    setButtonDisabled();
}