Greasy Fork is available in English.
过滤搜索页垃圾信息,并将重定向网址解析为直接网址
- // ==UserScript==
- // @name SearchEngine-Filter
- // @name:zh-CN 搜索引擎过滤器
- // @namespace https://greasyfork.org/zh-CN/users/42351
- // @version 1.8
- // @description Filter search page spam, And resolve redirect URL into direct
- // @description:zh-CN 过滤搜索页垃圾信息,并将重定向网址解析为直接网址
- // @icon64 https://antecer.gitlab.io/amusingdevice/icon/antecer.ico
- // @icon https://antecer.gitlab.io/amusingdevice/icon/antecer.ico
- // @author Antecer
- // @include http*://*.baidu.com*
- // @include http*://*.bing.com/search?*
- // @grant GM_xmlhttpRequest
- // @grant GM_getValue
- // @grant GM_setValue
- // @connect *
- // @run-at document-body
- // @compatible chrome 测试通过
- // @compatible firefox 未测试
- // @compatible opera 未测试
- // @compatible safari 未测试
- // ==/UserScript==
- (async () => {
- // 识别百度网页
- if (!location.host.endsWith('baidu.com')) return;
- // 识别百度搜索页 与 搜图页
- if (!(location.href.includes('baidu.com/s?') || location.href.includes('baidu.com/pcpage/similar?'))) return;
- // 读取脚本配置
- let scriptCfgs = {
- unRedirect: GM_getValue('unRedirect', true), // 反重定向(默认启用)
- unExperience: GM_getValue('unExperience', true), // 屏蔽百度经验(默认启用)
- unOtherQuery: GM_getValue('unOtherQuery', true), // 屏蔽其他人还在搜(默认启用)
- unExpert: GM_getValue('unExpert', true), // 屏蔽百度健康(默认启用)
- unHotQuery: GM_getValue('unHotQuery', false), // 屏蔽百度热搜榜(默认禁用)
- unSimilar: GM_getValue('unSimilar', false), // 屏蔽相关搜索(默认禁用)
- unGame: GM_getValue('unGame', false), // 屏蔽百度游戏(默认禁用)
- unTuiguang: GM_getValue('unTuiguang', true), // 屏蔽百度推广(默认启用)
- adBlock: GM_getValue('adBlock', true), // 屏蔽广告(默认启用)
- unRogue: GM_getValue('unRogue', 'hao123.com|2345.com') // 屏蔽流氓网站(默认启用,清空参数表示禁用)
- };
- // 创建sleep方法(用于async/await的延时处理)
- const Sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
- // 创建超时变量,防止长时间循环遍历document
- const timeoutValue = 10;
- // 创建选择器,用于判断element是否已加载
- const isBodyLoading = async (css) => {
- let timeout = timeoutValue;
- while (!document.querySelector(css) && timeout) {
- --timeout;
- await Sleep(1000);
- }
- };
- // 功能模块
- const Steps = {
- unRedirect: async () => {
- await isBodyLoading(`[href*="baidu.com/link?"],[href*="baidu.com/api/proxy?"]`);
- let allowUpgrade = document.createElement(`meta`);
- allowUpgrade.setAttribute('http-equiv', 'Content-Security-Policy');
- allowUpgrade.setAttribute('content', 'upgrade-insecure-requests');
- document.head.append(allowUpgrade);
- document.querySelectorAll(`[href*="baidu.com/link?"],[href*="baidu.com/api/proxy?"]`).forEach((element) => {
- (async (item) => {
- let reTry = false;
- let thisXhr = GM_xmlhttpRequest({
- url: item.href,
- method: 'GET',
- onreadystatechange: (r###lt) => {
- if (r###lt.readyState > 2) {
- item.href = r###lt.finalUrl;
- thisXhr.abort();
- }
- },
- onerror: (err) => {
- reTry = true;
- console.error(`[Baidu-Filter] Call HEAD Failed!`, err);
- }
- });
- })(element);
- });
- },
- unExperience: async () => {
- await isBodyLoading(`[href*="jingyan.baidu.com"]`);
- document.querySelectorAll(`#content_left>div`).forEach((item) => {
- if (item.querySelector(`[href*="jingyan.baidu.com"]`)) item.remove();
- });
- },
- unOtherQuery: async () => {
- await isBodyLoading(`.r###lt-op`);
- document.querySelectorAll(`#content_left>div`).forEach((item) => {
- if (item.innerHTML.includes(`>其他人还在搜<`)) item.remove();
- });
- },
- unExpert: async () => {
- while (!document.querySelector(`[href*="expert.baidu.com"]`)) await Sleep(1000);
- document.querySelectorAll(`#content_left>div`).forEach((item) => {
- if (item.querySelector(`[href*="expert.baidu.com"]`)) item.remove();
- });
- },
- unTuiguang: async () => {
- while (!document.querySelector(`[data-tuiguang]`)) await Sleep(1000);
- document.querySelectorAll(`#content_left>div`).forEach((item) => {
- if (item.querySelector(`span[data-tuiguang]`)) item.remove();
- });
- },
- unGame: async()=> {
- await isBodyLoading(`a[href*="lewan.baidu.com"]`);
- document.querySelectorAll(`#content_left>div`).forEach((item) => {
- if (item.querySelector(`a[href*="lewan.baidu.com"]`)) item.remove();
- });
- },
- unHotQuery: async () => {
- await isBodyLoading(`[title="百度热榜"]`);
- document.querySelectorAll(`#content_right`).forEach((item) => {
- if (item.querySelector(`[title="百度热榜"]`)) item.remove();
- });
- },
- unSimilar: async () => {
- while (!document.querySelector(`#rs`)) await Sleep(1000);
- document.querySelectorAll(`[id="rs"]`).forEach((item) => {
- if (item.querySelector(`table a[href^="/s?wd="]`)) item.remove();
- });
- },
- adBlock: async () => {
- while (!document.querySelector(`.ec_tuiguang_pplink`)) await Sleep(1000);
- document.querySelectorAll(`#content_left>div`).forEach((item) => {
- if (item.innerHTML.includes(`>广告</span>`)) item.remove();
- });
- },
- unRogue: async () => {
- let timeout = timeoutValue;
- let rogueList = scriptCfgs.unRogue;
- let rogueRegExp = new RegExp(rogueList);
- while (rogueList && timeout) {
- --timeout;
- let nodes = document.querySelectorAll('a');
- for (let i = nodes.length; i > 0; ) {
- if (nodes[--i].href.match(rogueRegExp)) {
- i = timeout = 0;
- }
- }
- await Sleep(1000);
- }
- let rList = document.querySelectorAll(`#content_left>div`);
- for (let i = rList.length; i > 0; ) {
- --i;
- let cList = rList[i].querySelectorAll('a');
- for (let n = cList.length; n > 0; ) {
- --n;
- if (cList[n].href.match(rogueRegExp)) {
- rList[i].remove();
- break;
- }
- }
- }
- }
- };
- // 检查并执行已启用的功能
- const runScript = async () => {
- let loopNum = 3; // 执行次数
- let timeout = 5; // 间隔时间
- while (loopNum--) {
- Object.keys(scriptCfgs).forEach((key) => {
- GM_setValue(key, scriptCfgs[key]); // 保存脚本配置
- if (scriptCfgs[key]) Steps[key](); // 执行脚本功能
- });
- for (let i = timeout; i-- > 0; ) await Sleep(1000);
- }
- };
- // 监听页面变化
- document.querySelector('title').addEventListener('DOMNodeInserted', () => runScript(), false);
- // 运行脚本
- runScript();
- })();
- (async()=>{
- // 识别必应网页
- if (!location.host.endsWith('bing.com')) return;
- // 读取脚本配置
- let scriptCfgs = {
- unRogue: GM_getValue('unRogue', 'hao123.com|2345.com') // 屏蔽流氓网站(默认启用,清空参数表示禁用)
- };
- // 创建sleep方法(用于async/await的延时处理)
- const Sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
- // 功能模块
- const Steps = {
- unRogue: async()=>{
- let rogueList = scriptCfgs.unRogue;
- let rogueRegExp = new RegExp(rogueList);
- let rList = document.querySelectorAll(`main>ol>li`);
- for (let i = rList.length; i > 0; ) {
- --i;
- let cList = rList[i].querySelectorAll('a');
- for (let n = cList.length; n > 0; ) {
- --n;
- if (cList[n].href.match(rogueRegExp)) {
- rList[i].remove();
- break;
- }
- }
- }
- }
- };
- // 检查并执行已启用的功能
- const runScript = async () => {
- let loopNum = 3; // 执行次数
- let timeout = 5; // 间隔时间
- while (loopNum--) {
- Object.keys(scriptCfgs).forEach((key) => {
- GM_setValue(key, scriptCfgs[key]); // 保存脚本配置
- if (scriptCfgs[key]) Steps[key](); // 执行脚本功能
- });
- for (let i = timeout; i-- > 0; ) await Sleep(1000);
- }
- };
- // 监听页面变化
- document.querySelector('title').addEventListener('DOMNodeInserted', () => runScript(), false);
- // 运行脚本
- runScript();
- })();