您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
移除LeetCode-CN付费题目 付费书籍
// ==UserScript== // @name 移除LeetCode-CN付费(plus专享)题目与书籍 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 移除LeetCode-CN付费题目 付费书籍 // @author SmileYik // @match *://leetcode-cn.com/* // @match *://leetcode.cn/* // @icon https://www.google.com/s2/favicons?sz=64&domain=leetcode-cn.com // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Your code here... const PLUS_TAG_CLASS = "css-mn931f-PlusTag"; const ANT_TABLE_ROW_CLASS = "ant-table-row"; const ANT_TABLE_CONTENT = "ant-table-content"; const PAID_ONLY_ICON_CLASS = "paid-only-icon__hiYO"; const QUESTION_CLASS = "question__3lUu"; const REMOVE_TOGETHER_CLASS_1_1 = "ml-2"; const REMOVE_TOGETHER_CLASS_1_2 = "shrink-0"; const REMOVE_TOGETHER_CLASS = "odd:bg-layer-1"; const LEFT_PROBLEM_PANE = "question-picker-detail-menu__3NQq show__3hiR"; const PRICE_CONTAINER_CLASS = "css-1b13e60-PriceContainer"; const DISCOUNT_CONTAINER_CLASS = "css-2xg4ff-DiscountContainer"; const BOOK_CONTAINER_CLASS = "css-1v2lce9-BookContainer"; const TOP_LEFT_TAG_CLASS = "css-69f4mf-TopLeftTag"; const KEYWORD_OF_TOP_LEFT_TAG_SRC = "premium-only"; let removePlugProblemsTickId = 0; let removePlugProblemsTickTimes = 60; let removePriceBookTickId = 0; let removePriceBookTickTimes = 60; window.onload = function() { removePlugProblemsTickTimes = 60; removePlugProblemsTickId = setInterval(removePlugProblemsTick, 1000); removePriceBookTickTimes = 60; removePriceBookTickId = setInterval(removePriceBookTick, 1000); setInterval(function() { const element = document.getElementsByClassName(LEFT_PROBLEM_PANE); if (element.length > 0) { removePlugProblemsEvent(getPlusProblems()); } }, 1000); document.body.onmousewheel = function () { const elements = getAllBook(); removePriceBookEvent(elements); removePlugProblemsEvent(getPlusProblems()); } }; function getPlusProblems() { const elements = []; let temp = document.getElementsByClassName(PLUS_TAG_CLASS); for (let i in temp) { elements.push(temp[i]); } temp = document.getElementsByClassName(PAID_ONLY_ICON_CLASS); for (let i in temp) { elements.push(temp[i]); } temp = document.getElementsByClassName(REMOVE_TOGETHER_CLASS_1_1); for (let i in temp) { if (containsClassName(temp[i], REMOVE_TOGETHER_CLASS_1_2)) { elements.push(temp[i]); } } return elements; } function removePlugProblemsTick() { removePlugProblemsTickTimes -= 1; const table = document.getElementsByClassName(ANT_TABLE_CONTENT); if (table.length <= 0) { if (removePlugProblemsTickTimes == 0) { clearInterval(removePlugProblemsTickId); } return; } const elements = getPlusProblems(); if (elements.length <= 0) { if (removePlugProblemsTickTimes == 0) { clearInterval(removePlugProblemsTickId); } return; } removePlugProblemsEvent(elements); clearInterval(removePlugProblemsTickId); } function removePlugProblemsEvent(elements) { for (let index in elements) { let element = elements[index]; while (element && element.tagName != "BODY") { if (element && (containsClassName(element, ANT_TABLE_ROW_CLASS) || containsClassName(element, REMOVE_TOGETHER_CLASS) || containsClassName(element, QUESTION_CLASS))) { element.hidden = "hidden"; break; } element = element.parentElement; } } } function getAllBook() { const elements1 = document.getElementsByClassName(PRICE_CONTAINER_CLASS); const elements2 = document.getElementsByClassName(DISCOUNT_CONTAINER_CLASS); const elements3 = document.getElementsByClassName(TOP_LEFT_TAG_CLASS); let elements = []; for (let index in elements1) { elements.push(elements1[index]); } for (let index in elements2) { elements.push(elements2[index]); } for (let index in elements3) { const element = elements3[index]; if (element && element.src && element.src.indexOf(KEYWORD_OF_TOP_LEFT_TAG_SRC) > 0) { elements.push(element); } } return elements; } function removePriceBookTick() { removePriceBookTickTimes -= 1; const elements = getAllBook(); if (elements.length <= 0) { if (removePlugProblemsTickTimes == 0) { clearInterval(removePriceBookTickId); return; } } removePriceBookEvent(elements); clearInterval(removePriceBookTickId); } // give elements and to check which should be remove. function removePriceBookEvent(elements) { for (let index in elements) { let element = elements[index]; if (element.tagName == "DIV" && element.childElementCount == 0) { continue; } while (element && element.tagName != "BODY") { let parent = element.parentElement; if (parent && containsClassName(parent, BOOK_CONTAINER_CLASS)) { element.hidden = "hidden"; break; } element = parent; } } } // check the element contants aim class name or not. function containsClassName(element, className) { const list = element.classList; for (let index in list) { if (list[index] == className) { return true; } } return false; } })();