ZhihuAnaswerChecker-JavaScript

2022/8/17 10:00:00

  1. // ==UserScript==
  2. // @name ZhihuAnaswerChecker-JavaScript
  3. // @namespace Violentmonkey Scripts
  4. // @match https://www.zhihu.com/people/*
  5. // @require https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
  6. // @grant window.open
  7. // @grant window.focus
  8. // @version 1.4
  9. // @author 老实人不接盘@知乎(主体编写),尼尼尼@知乎(初版编写)
  10. // @description 2022/8/17 10:00:00
  11. // @license GPL3
  12. // ==/UserScript==
  13.  
  14.  
  15. // 知乎用户用于检查 “回答” 被屏蔽情况的Javascript脚本。
  16. // 仅限检查“回答”项目,且单次执行只检查当前的单个页面。
  17.  
  18. // 简要操作说明:
  19. // 1.在浏览器扩展商店中搜索“暴力猴“、”油猴“之类扩展插件,安装并启用。下面以”暴力猴“为例。
  20. // 2.在暴力猴插件中点击”+“号,新建JS脚本,将此脚本内容全部复制粘贴进去并保存。
  21. // 3.进入知乎主页,登录(不可用)知乎账户。在暴力猴插件控制台中启用上面保存的脚本。刷新页面,会看到页面顶部多出一个绿色”点击执行检查“按钮。
  22. // 4.进入个人主页, 点击”回答“栏。页面加载完成后,点击“点击执行检查”按钮,即可输出当前页回答被屏蔽的情况。
  23. // 5.也可以翻页进入以前的回答页面,检查以往任何一页的被屏蔽情况。但单次执行只能检查当前这一页。
  24.  
  25. // 建议用途:随手检查最新一页回答中的被屏蔽情况。注意不要过于频繁执行,以免被知乎拒绝请求。
  26.  
  27. (function() {
  28. 'use strict';
  29.  
  30. //全局变量设置
  31. var baseUrl = "https://www.zhihu.com/people";
  32. var currentUrl = window.location.href;
  33. var currentAllLinkList=[];
  34. var currentBlockedLinkList=[];
  35. var resultPage='';//检测结果页面文本。
  36.  
  37. function c(v){
  38. console.log(v);
  39. }
  40.  
  41.  
  42. //获取当前页面上回答、文章或想法链接链接(class="List-item")
  43. function getAllLinksOnCurrentPage(){
  44. var linkList = [];
  45. var currentPageLinks = document.querySelectorAll("a[data-za-detail-view-element_name=Title]");
  46.  
  47. if( currentPageLinks.length != 0){
  48. //存入数组并计数
  49. currentPageLinks.forEach(function (listItem) {
  50. //取出关键信息并存入数组
  51. let link = listItem.href;
  52. let title = listItem.innerHTML;
  53. let infoItem = {title, link};
  54. linkList.push(infoItem);
  55. });
  56. }
  57.  
  58. let tmp = getAllLinkList();
  59. setAllLinkList(tmp.concat(linkList));
  60.  
  61. return linkList;
  62.  
  63. }
  64.  
  65. //对链接进行可访问性检查(非登录(不可用)状态、不区分“仅自己可见”和“仅自己和关注者可见”)。
  66. function checkAllLinkList(list){
  67. if(list.length != 0){
  68. c(list);
  69. var fetchCount = 0;
  70. list.forEach(function (listItem) {
  71. c('fetching...');
  72. let link = listItem.link;
  73. let title = listItem.title;
  74. fetch(link,{credentials:"omit"})
  75. .then((response) => {
  76. return response.text();
  77. }).then((data) => {
  78. ++fetchCount;
  79. //以网站响应页面中“没有知识存在的荒原”为标志,进行检查。
  80. if (data.includes('没有知识存在的荒原')) {
  81. currentBlockedLinkList.push(listItem);
  82. c('当前被屏蔽结果:'+currentBlockedLinkList);
  83.  
  84. }
  85. if(fetchCount === list.length){
  86. c(currentBlockedLinkList);
  87.  
  88. let tmp = getBlockedLinkList();
  89. setBlockedLinkList(tmp.concat(currentBlockedLinkList));
  90.  
  91. showResult();
  92.  
  93. //清除缓存
  94. removeLocalStorage();
  95. setAllLinkList([]);
  96. setBlockedLinkList([]);
  97. setCurrentPageNum(1);
  98. setPageCount(1);
  99. currentAllLinkList=[];
  100. currentBlockedLinkList=[];
  101. }
  102. });
  103.  
  104. });
  105. }
  106.  
  107. }
  108.  
  109. //展示结果
  110. function showResult(){
  111. var allLinkList = [];
  112. var blockedLinkList = [];
  113. allLinkList = getAllLinkList();
  114. blockedLinkList = getBlockedLinkList();
  115.  
  116. resultPage = '<!DOCTYPE html><html><body><div>检测完毕。<br>如有创作内容被屏蔽,请与知乎小管家交流,共同学习,共同进步。</div><p><div><b>当前页面总回答数量:'
  117. + allLinkList.length
  118. + ', 被屏蔽数量:'
  119. + blockedLinkList.length
  120. + '</b></div><p><div><table>';
  121.  
  122. if(blockedLinkList.length !== 0) {
  123. blockedLinkList.forEach(function (listItem) {
  124. let cell = '<tr><td>'
  125. + listItem.title
  126. + '</td><td>'
  127. + '<a href="'+listItem.link+'" target=_blank>'
  128. + listItem.link
  129. + '</a></td></tr>';
  130.  
  131. resultPage += cell;
  132. });
  133. }
  134.  
  135. resultPage +='</table></div></body></html>';
  136.  
  137. //新建浏览器标签,并展示检查结果。
  138. const newTab = window.open('','_blank');
  139. newTab.document.write(resultPage);
  140. newTab.focus();
  141. }
  142.  
  143.  
  144. function init() {
  145. checkAllLinkList(getAllLinksOnCurrentPage());
  146.  
  147. }
  148.  
  149. function main() {
  150. c("执行main");
  151. addCheckButton();
  152.  
  153. }
  154.  
  155. //在页面上添加执行按钮
  156. function addCheckButton() {
  157. $('body').append('<div id="CheckLink">点击执行检查</div>')
  158. $('#CheckLink').css('width', '200px')
  159. $('#CheckLink').css('position', 'absolute')
  160. $('#CheckLink').css('top', '70px')
  161. $('#CheckLink').css('left', '350px')
  162. $('#CheckLink').css('background-color', '#28a745')
  163. $('#CheckLink').css('color', 'white')
  164. $('#CheckLink').css('font-size', 'large')
  165. $('#CheckLink').css('z-index', 100)
  166. $('#CheckLink').css('border-radius', '25px')
  167. $('#CheckLink').css('text-align', 'center')
  168. $('#CheckLink').click(function () {
  169. checkAllLinkList(getAllLinksOnCurrentPage());
  170. });
  171. //$('#CheckLink').draggable();
  172.  
  173. }
  174.  
  175. function handleLocalStorage(method, key, value) {
  176. switch (method) {
  177. case 'get' : {
  178. let temp = window.localStorage.getItem(key);
  179. if (temp) {
  180. return temp
  181. } else {
  182. return false
  183. }
  184. }
  185. case 'set' : {
  186. window.localStorage.setItem(key, value);
  187. break
  188. }
  189. case 'remove': {
  190. window.localStorage.removeItem(key);
  191. break
  192. }
  193. default : {
  194. return false
  195. }
  196. }
  197. }
  198.  
  199.  
  200. function removeLocalStorage(){
  201. handleLocalStorage('remove','currentPageNum');
  202. handleLocalStorage('remove','pageCount');
  203. handleLocalStorage('remove','allLinkList');
  204. handleLocalStorage('remove','blockedLinkList');
  205. }
  206.  
  207. function setCurrentPageNum(v){
  208. handleLocalStorage('set','currentPageNum',v);
  209. }
  210.  
  211. function setPageCount(v){
  212. handleLocalStorage('set','pageCount',v);
  213. }
  214.  
  215. function getPageCount(){
  216. return handleLocalStorage('get','pageCount',0);
  217. }
  218.  
  219.  
  220. function setAllLinkList(v){
  221. handleLocalStorage('set','allLinkList',JSON.stringify(v));
  222. }
  223.  
  224. function getAllLinkList(){
  225. return JSON.parse(handleLocalStorage('get','allLinkList',0));
  226. }
  227.  
  228. function setBlockedLinkList(v){
  229. handleLocalStorage('set','blockedLinkList',JSON.stringify(v));
  230. }
  231.  
  232. function getBlockedLinkList(){
  233. return JSON.parse(handleLocalStorage('get','blockedLinkList',0));
  234. }
  235.  
  236.  
  237.  
  238. document.onreadystatechange = function(){
  239. if(document.readyState === "complete"){
  240. removeLocalStorage();
  241.  
  242. setAllLinkList([]);
  243. setBlockedLinkList([]);
  244. setCurrentPageNum(1);
  245. setPageCount(1);
  246. main();
  247. }
  248.  
  249. }
  250. }
  251.  
  252.  
  253.  
  254. )();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址