您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动刷linuxdo文章
// ==UserScript== // @name Auto Read // @namespace http://tampermonkey.net/ // @version 1.4.2 // @description 自动刷linuxdo文章 // @author liuweiqing // @match https://meta.discourse.org/* // @match https://linux.do/* // @match https://meta.appinn.net/* // @match https://community.openai.com/ // @grant none // @license MIT // @icon https://www.google.com/s2/favicons?domain=linux.do // ==/UserScript== (function () { ("use strict"); // 定义可能的基本URL const possibleBaseURLs = [ "https://linux.do", "https://meta.discourse.org", "https://meta.appinn.net", "https://community.openai.com", ]; const commentLimit = 1000; const topicListLimit = 100; const likeLimit = 50; // 获取当前页面的URL const currentURL = window.location.href; // 确定当前页面对应的BASE_URL let BASE_URL = possibleBaseURLs.find((url) => currentURL.startsWith(url)); console.log("currentURL:", currentURL); // 环境变量:阅读网址,如果没有找到匹配的URL,则默认为第一个 if (!BASE_URL) { BASE_URL = possibleBaseURLs[0]; console.log("默认BASE_URL设置为: " + BASE_URL); } else { console.log("当前BASE_URL是: " + BASE_URL); } console.log("脚本正在运行在: " + BASE_URL); //1.进入网页 https://linux.do/t/topic/数字(1,2,3,4) //2.使滚轮均衡的往下移动模拟刷文章 // 检查是否是第一次运行脚本 function checkFirstRun() { if (localStorage.getItem("isFirstRun") === null) { console.log("脚本第一次运行,执行初始化操作..."); updateInitialData(); localStorage.setItem("isFirstRun", "false"); } else { console.log("脚本非第一次运行"); } } // 更新初始数据的函数 function updateInitialData() { localStorage.setItem("read", "false"); // 开始时自动滚动关闭 localStorage.setItem("autoLikeEnabled", "false"); //默认关闭自动点赞 console.log("执行了初始数据更新操作"); } const delay = 2000; // 滚动检查的间隔(毫秒) let scrollInterval = null; let checkScrollTimeout = null; let autoLikeInterval = null; function scrollToBottomSlowly(distancePerStep = 20, delayPerStep = 50) { if (scrollInterval !== null) { clearInterval(scrollInterval); } scrollInterval = setInterval(() => { window.scrollBy(0, distancePerStep); }, delayPerStep); // 每50毫秒滚动20像素 } function getLatestTopic() { let latestPage = Number(localStorage.getItem("latestPage")) || 0; let topicList = []; let isDataSufficient = false; while (!isDataSufficient) { latestPage++; const url = `${BASE_URL}/latest.json?no_definitions=true&page=${latestPage}`; $.ajax({ url: url, async: false, success: function (result) { if ( result && result.topic_list && result.topic_list.topics.length > 0 ) { result.topic_list.topics.forEach((topic) => { // 未读且评论数小于 commentLimit if (commentLimit > topic.posts_count) { //其实不需要 !topic.unseen && topicList.push(topic); } }); // 检查是否已获得足够的 topics if (topicList.length >= topicListLimit) { isDataSufficient = true; } } else { isDataSufficient = true; // 没有更多内容时停止请求 } }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.error(XMLHttpRequest, textStatus, errorThrown); isDataSufficient = true; // 遇到错误时也停止请求 }, }); } if (topicList.length > topicListLimit) { topicList = topicList.slice(0, topicListLimit); } // 其实不需要对latestPage操作 // localStorage.setItem("latestPage", latestPage); localStorage.setItem("topicList", JSON.stringify(topicList)); } function openNewTopic() { let topicListStr = localStorage.getItem("topicList"); let topicList = topicListStr ? JSON.parse(topicListStr) : []; // 如果列表为空,则获取最新文章 if (topicList.length === 0) { getLatestTopic(); topicListStr = localStorage.getItem("topicList"); topicList = topicListStr ? JSON.parse(topicListStr) : []; } // 如果获取到新文章,打开第一个 if (topicList.length > 0) { const topic = topicList.shift(); localStorage.setItem("topicList", JSON.stringify(topicList)); if (topic.last_read_post_number) { window.location.href = `${BASE_URL}/t/topic/${topic.id}/${topic.last_read_post_number}`; } else { window.location.href = `${BASE_URL}/t/topic/${topic.id}`; } } } // 检查是否已滚动到底部(不断重复执行),到底部时跳转到下一个话题 function checkScroll() { if (localStorage.getItem("read")) { if ( window.innerHeight + window.scrollY >= document.body.offsetHeight - 100 ) { console.log("已滚动到底部"); openNewTopic(); } else { scrollToBottomSlowly(); if (checkScrollTimeout !== null) { clearTimeout(checkScrollTimeout); } checkScrollTimeout = setTimeout(checkScroll, delay); } } } // 入口函数 window.addEventListener("load", () => { checkFirstRun(); console.log( "autoRead", localStorage.getItem("read"), "autoLikeEnabled", localStorage.getItem("autoLikeEnabled") ); if (localStorage.getItem("read") === "true") { console.log("执行正常的滚动和检查逻辑"); checkScroll(); if (isAutoLikeEnabled()) { autoLike(); } } }); // 获取当前时间戳 const currentTime = Date.now(); // 获取存储的时间戳 const defaultTimestamp = new Date("1999-01-01T00:00:00Z").getTime(); //默认值为1999年 const storedTime = parseInt( localStorage.getItem("clickCounterTimestamp") || defaultTimestamp.toString(), 10 ); // 获取当前的点击计数,如果不存在则初始化为0 let clickCounter = parseInt(localStorage.getItem("clickCounter") || "0", 10); // 检查是否超过24小时(24小时 = 24 * 60 * 60 * 1000 毫秒) if (currentTime - storedTime > 24 * 60 * 60 * 1000) { // 超过24小时,清空点击计数器并更新时间戳 clickCounter = 0; localStorage.setItem("clickCounter", "0"); localStorage.setItem("clickCounterTimestamp", currentTime.toString()); } console.log(`Initial clickCounter: ${clickCounter}`); function triggerClick(button) { const event = new MouseEvent("click", { bubbles: true, cancelable: true, view: window, }); button.dispatchEvent(event); } function autoLike() { console.log(`Initial clickCounter: ${clickCounter}`); // 寻找所有的discourse-reactions-reaction-button const buttons = document.querySelectorAll( ".discourse-reactions-reaction-button" ); if (buttons.length === 0) { console.error( "No buttons found with the selector '.discourse-reactions-reaction-button'" ); return; } console.log(`Found ${buttons.length} buttons.`); // 调试信息 // 逐个点击找到的按钮 buttons.forEach((button, index) => { if ( (button.title !== "点赞此帖子" && button.title !== "Like this post") || clickCounter >= likeLimit ) { return; } // 使用setTimeout来错开每次点击的时间,避免同时触发点击 autoLikeInterval = setTimeout(() => { // 模拟点击 triggerClick(button); // 使用自定义的触发点击方法 console.log(`Clicked like button ${index + 1}`); clickCounter++; // 更新点击计数器 // 将新的点击计数存储到localStorage localStorage.setItem("clickCounter", clickCounter.toString()); // 如果点击次数达到likeLimit次,则设置点赞变量为false if (clickCounter === likeLimit) { console.log( `Reached ${likeLimit} likes, setting the like variable to false.` ); localStorage.setItem("autoLikeEnabled", "false"); // 使用localStorage存储点赞变量状态 } else { console.log("clickCounter:", clickCounter); } }, index * 3000); // 这里的1000毫秒是两次点击之间的间隔,可以根据需要调整 }); } const button = document.createElement("button"); // 初始化按钮文本基于当前的阅读状态 button.textContent = localStorage.getItem("read") === "true" ? "停止阅读" : "开始阅读"; button.style.position = "fixed"; button.style.bottom = "10px"; // 之前是 top button.style.left = "10px"; // 之前是 right button.style.zIndex = 1000; button.style.backgroundColor = "#f0f0f0"; // 浅灰色背景 button.style.color = "#000"; // 黑色文本 button.style.border = "1px solid #ddd"; // 浅灰色边框 button.style.padding = "5px 10px"; // 内边距 button.style.borderRadius = "5px"; // 圆角 document.body.appendChild(button); button.onclick = function () { const currentlyReading = localStorage.getItem("read") === "true"; const newReadState = !currentlyReading; localStorage.setItem("read", newReadState.toString()); button.textContent = newReadState ? "停止阅读" : "开始阅读"; if (!newReadState) { if (scrollInterval !== null) { clearInterval(scrollInterval); scrollInterval = null; } if (checkScrollTimeout !== null) { clearTimeout(checkScrollTimeout); checkScrollTimeout = null; } localStorage.removeItem("navigatingToNextTopic"); } else { // 如果是Linuxdo,就导航到我的帖子 if (BASE_URL == "https://linux.do") { window.location.href = "https://linux.do/t/topic/13716/700"; } else { window.location.href = `${BASE_URL}/t/topic/1`; } checkScroll(); } }; //自动点赞按钮 // 在页面上添加一个控制自动点赞的按钮 const toggleAutoLikeButton = document.createElement("button"); toggleAutoLikeButton.textContent = isAutoLikeEnabled() ? "禁用自动点赞" : "启用自动点赞"; toggleAutoLikeButton.style.position = "fixed"; toggleAutoLikeButton.style.bottom = "50px"; // 之前是 top,且与另一个按钮错开位置 toggleAutoLikeButton.style.left = "10px"; // 之前是 right toggleAutoLikeButton.style.zIndex = "1000"; toggleAutoLikeButton.style.backgroundColor = "#f0f0f0"; // 浅灰色背景 toggleAutoLikeButton.style.color = "#000"; // 黑色文本 toggleAutoLikeButton.style.border = "1px solid #ddd"; // 浅灰色边框 toggleAutoLikeButton.style.padding = "5px 10px"; // 内边距 toggleAutoLikeButton.style.borderRadius = "5px"; // 圆角 document.body.appendChild(toggleAutoLikeButton); // 为按钮添加点击事件处理函数 toggleAutoLikeButton.addEventListener("click", () => { const isEnabled = !isAutoLikeEnabled(); setAutoLikeEnabled(isEnabled); toggleAutoLikeButton.textContent = isEnabled ? "禁用自动点赞" : "启用自动点赞"; }); // 判断是否启用自动点赞 function isAutoLikeEnabled() { // 从localStorage获取autoLikeEnabled的值,如果未设置,默认为"true" return localStorage.getItem("autoLikeEnabled") !== "false"; } // 设置自动点赞的启用状态 function setAutoLikeEnabled(enabled) { localStorage.setItem("autoLikeEnabled", enabled ? "true" : "false"); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址