屏蔽百度热搜

一个屏蔽百度热搜的脚本

目前为 2024-04-28 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 屏蔽百度热搜
  3. // @namespace https://github.com/lischen2014/purify-baidu
  4. // @version 0.07
  5. // @description 一个屏蔽百度热搜的脚本
  6. // @author Leon
  7. // @match https://www.baidu.com/*
  8. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. "use strict";
  15.  
  16. var targetNode = document.querySelector("body");
  17. var config = { childList: true, subtree: true };
  18.  
  19. // 功能:移除热搜和其他广告
  20. var removeHotSearchAndAds = function () {
  21. // 移除侧边栏的热搜框
  22. var baiduReSouSideBar = document.getElementById("content_right");
  23. if (baiduReSouSideBar) {
  24. baiduReSouSideBar.remove();
  25. console.log("搜索结果页侧边栏已关闭");
  26. }
  27. // 移除主页面的热搜框
  28. var baiduReSouInMainPage = document.getElementById("s-hotsearch-wrapper");
  29. if (baiduReSouInMainPage) {
  30. baiduReSouInMainPage.remove();
  31. console.log("主页热搜关键词已关闭");
  32. }
  33.  
  34. // 延迟移除搜索结果页使用.c-row类的广告
  35. setTimeout(function () {
  36. var ads = document.querySelectorAll(".c-row");
  37. ads.forEach(function (ad) {
  38. ad.remove();
  39. console.log("已屏蔽默认搜索结果广告");
  40. });
  41. }, 500); // 延迟500毫秒移除广告
  42. };
  43.  
  44. // 功能:移除特定广告
  45. var removeSpecificAds = function () {
  46. var candidates = document.querySelectorAll(
  47. "div.result.c-container.new-pmd"
  48. );
  49. candidates.forEach((candidate) => {
  50. let links = candidate.querySelectorAll("div > a");
  51. links.forEach((link) => {
  52. if (link.textContent.includes("广告")) {
  53. candidate.remove();
  54. console.log("已屏蔽含追加广告");
  55. }
  56. });
  57. });
  58. };
  59.  
  60. // MutationObserver回调
  61. var observer = new MutationObserver((mutations) => {
  62. mutations.forEach((mutation) => {
  63. if (mutation.addedNodes && mutation.addedNodes.length) {
  64. removeHotSearchAndAds();
  65. // 增强广告移除的调用,以应对动态加载的内容
  66. setTimeout(removeSpecificAds, 300); // 针对动态加载内容,稍后重试
  67. }
  68. });
  69. });
  70.  
  71. observer.observe(targetNode, config);
  72. })();