您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
隐藏掉你可能感兴趣
当前为
// ==UserScript== // @name 知乎-我不感兴趣 // @namespace // @version 3.0 // @description 隐藏掉你可能感兴趣 // @author MQ // @grant GM_setValue // @grant GM_getValue // @grant GM_notification // @match https://www.zhihu.com/ // @namespace https://gf.qytechs.cn/users/159603 // ==/UserScript== (function() { 'use strict'; const MAX_FILTER_COUNT = 100; //最多主动刷新的条目数 const USER_ID_KEY = "user-id"; const USER_TOPICS_KEY = "user-topics"; let GET = (url, headers) => { let xhr = new XMLHttpRequest(); xhr.open("GET", url, false); if (headers) { Object.keys(headers).forEach((key) => { xhr.setRequestHeader(key, headers[key]); }); } xhr.send(); return xhr.response; }; let getUserId = () => { //以下部分获取用户ID //获取右上角头像按钮 const avatar = document.querySelector("button.Button.AppHeader-profileEntry.Button--plain"); //模拟点击 avatar.click(); //获取弹出菜单 const homeElm = document.querySelector("a.Button.Menu-item.AppHeaderProfileMenu-item.Button--plain"); console.log(homeElm); //获取主页链接 const homeLink = homeElm.href; console.log(homeLink); //从链接中匹配用户ID const userId = homeLink.match(/(?<=people\/).*/).toString(); console.log("user id:", userId); //关闭弹出菜单 avatar.click(); return userId; }; let userId = GM_getValue(USER_ID_KEY, null); if (userId == null) { userId = getUserId(); GM_setValue(USER_ID_KEY, getUserId()); } else { setTimeout(()=> GM_setValue(USER_ID_KEY, getUserId()), 0); } let getUserTopics = (userId) => { //以下部分获取用户关注话题,知乎这前端太辣鸡了 //获取话题页面 const rawTopicsPage = GET(`/people/${userId}/following/topics`); //得到的是一坨raw的html,parse一下 const topicsPageDOM = new DOMParser().parseFromString(rawTopicsPage, "text/html"); //里面的这个attribute的值是一个json const rawTopicsPageData = topicsPageDOM.querySelector("div#data").getAttribute("data-state"); //parse一下 const userData = JSON.parse(rawTopicsPageData); //里面有你关注的所有话题 const followedTopics = Object.values(userData.entities.topics).map(e=>e.name); console.log("your followed topics: ", followedTopics); return followedTopics; }; let followedTopics = GM_getValue(USER_TOPICS_KEY, null); if (followedTopics == null) { followedTopics = getUserTopics(userId); GM_setValue(USER_TOPICS_KEY, followedTopics); } else { setTimeout(()=> GM_setValue(USER_TOPICS_KEY, getUserTopics(userId)), 0); } const mainFrame = document.querySelector(".TopstoryMain div"); //全局中没被隐藏的卡片数 let nonHiddenCards = 0; let allCards = 0; let fillNewCards = () => setTimeout(() => window.dispatchEvent(new Event("resize"))); //发送resize事件来补充新的内容 //检查函数 let checkCards = (cards) => { if (cards.length == 0) return; cards.forEach(e => { try{ if (e.hidden) return; let feature = e.querySelector(".FeedSource-firstline"); let doHide = false; if (feature.textContent.match(/你可能感兴趣|热门内容/)) { doHide = true; console.log(feature.textContent, "hide"); } else if (feature.textContent.match(/来自话题/)) { var topicDivs = [...feature.querySelectorAll("div.Popover div")]; var topicNames = topicDivs.map(e=>e.textContent); doHide = true; for(let topicName of topicNames) { if(followedTopics.includes(topicName)) { doHide = false; break; } } console.log(topicNames, doHide ? "hide" : "not hide"); } if (doHide) { e.remove(); } else { nonHiddenCards++; } allCards++; } catch(x) { console.log(x, e); } }); if (nonHiddenCards < 8 && allCards < MAX_FILTER_COUNT) { console.log(`too few cards (${nonHiddenCards}/${allCards}) requesting for more...`); fillNewCards(); } else if (nonHiddenCards < 8 && allCards >= MAX_FILTER_COUNT) { let option = { text: `知乎-我不感兴趣 已为您过滤了 ${allCards-nonHiddenCards} 条推送,仍然没有足够的条目填满您的主页,您可以去喝杯茶,看看别的东西。`, title: "主动刷新已停止", }; GM_notification(option, null); } }; //注册(不可用)钩子 var ob = new MutationObserver((records) => { //console.log("mutation records: ", records); let addedCards = records.reduce((r, e) => r.concat([...e.addedNodes]), []); checkCards(addedCards); }); var config = { childList: true }; ob.observe(mainFrame, config); console.log("hooked"); //进行首次检查,这里不DRY checkCards([...mainFrame.children]); }());
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址