baijiahao-fucker

删除搜索结果中关于百家号与百度视频的内容

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         baijiahao-fucker
// @namespace    http://tampermonkey.net/
// @include      http://www.baidu.com/s*
// @include      https://www.baidu.com/s*
// @description  删除搜索结果中关于百家号与百度视频的内容
// @author       LuRenJiasWorld
// @grant        GM.xmlHttpRequest
// @run-at       document-end
// @version	 0.21
// @connect      www.baidu.com
// ==/UserScript==

// 初始化
(function () {
	fuckBaijiahao();
})();


// 因为百度搜索采用了路由机制,切换搜索词不刷新页面
// 因此在切换搜索词的时候,插件将不再生效,需要定时检测URL是否改变
var urlStore = window.location.href;
setInterval(() => {
	let currentUrl = window.location.href;
	if (currentUrl !== urlStore) {
		let interval = setInterval(() => {
			if ($("#_mask").length !== 1) {
				fuckBaijiahao();
				clearInterval(interval);
			}
		}, 10);
		urlStore = currentUrl;
	}
}, 1000);

// 艹百家号
function fuckBaijiahao() {
	'use strict';

	// 所有搜索结果标签
	let tags = $('#content_left a[href^="http://www.baidu.com/link?url="]');

	// 聚合搜索结果(包含一部分百家号)
	let top = $('.c-offset');

	// 百度视频
	let video = $('.op-short-video-pc');

	// 普通计数器
	let counter = 0;

	// 百家号文章计数器
	let bjhCounter = 0;

	// 搜索结果数量
	let resultCounter = $(".nums_text");
	let resultCounterText = $(".nums_text").text();

	// 轮询每个链接,获取链接背后的真实url
	// 发现URL包含baijiahao,删除之
	// 如果是聚合搜索结果,且聚合搜索结果中全是百家号,则删除整个聚合搜索框
	tags.each(function (i, v) {
		let url = $(this).attr('href');
		(function (url, currentNode) {
			url = url.indexOf("eqid") < 0 ? url + "&wd=&eqid=" : url;

			// 这里不能使用$.ajax(),因为浏览器默认禁止发起修改headers的请求
			GM.xmlHttpRequest({
				method: "GET",
				url: url,
				async: true,
				headers: {
					"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
					"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
					"Host": "www.baidu.com",
					"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7",
					"Pragma": "no-cache",
					"Cache-Control": "no-cache",
					"Accept-Encoding": "gzip, deflate, br",
					"Connection": "keep-alive"
				},
				onload: function (response) {
					let reg = /URL=['|"]([^'|"]+)/;

					if (reg.test(response.responseText)) {

						let realUrl = response.responseText.match(reg)[1];

						if (realUrl.indexOf('baijia') !== -1) {
							bjhCounter ++;

							// 去除父元素 直接删除该搜索结果
							// 针对单独搜索结果
							$(currentNode).parents('.c-container').remove();

							// 如果『聚合搜索』内容为空,直接删除父元素
							// 针对聚合搜索结果
							if (!top.children().length) {
								top.parent().remove();
							}

						} else {
							// 还原真实地址
							// 减小百度采集用户链接点击信息的概率
							// 保护隐私,从我做起
							$(currentNode).attr('href', realUrl);
						}

						resultCounter.text(resultCounterText + ",其中包含" + bjhCounter + "个百家号链接,已全部去除");
					}
				},
			});
		})(url, this);
	});

	// 记录日志
	// 因为上面清除百家号链接是一个异步过程,因此要一直轮询,一直到确定百家号文章数量不再改变,则记录日志
	let bjhCounterTmp = bjhCounter;
	let logCounter = 0;
	let interval = setInterval(() => {
		if (bjhCounterTmp !== bjhCounter) {
			bjhCounterTmp = bjhCounter;
		} else if (bjhCounter !== 0 && bjhCounterTmp !== 0){
			clearInterval(interval);
		} else if (bjhCounter === 0 && bjhCounterTmp === 0 && logCounter > 20) {
			// 针对网页内确实没有百家号的情况
			// 且时间已经超过四秒钟
			clearInterval(interval);
		}
		logCounter++;
	}, 200);

	// 移除百度视频
	if (video.length !== 0) {
		video.parent().remove();
	}
}