Greasy Fork is available in English.

CSDN博客刷积分刷等级助手

打开任意一个CSDN博客页面,就可以进行自动点赞评论,可以涨积分升级,可以自定义策略与评论内容,高度可定制化

  1. // ==UserScript==
  2. // @name CSDN博客刷积分刷等级助手
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.1.9
  5. // @description 打开任意一个CSDN博客页面,就可以进行自动点赞评论,可以涨积分升级,可以自定义策略与评论内容,高度可定制化
  6. // @author ZainCheung
  7. // @match *://blog.csdn.net/*/article/details/*
  8. // @grant GM.xmlHttpRequest
  9. // @connect csdn.net
  10. // @resource html https://cdn.jsdelivr.net/gh/ZainCheung/CSDN-helper@master/dist/app@1.0.html
  11. // @resource css https://cdn.jsdelivr.net/gh/ZainCheung/CSDN-helper/dist/app@1.0.css
  12. // @resource js https://cdn.jsdelivr.net/gh/ZainCheung/CSDN-helper/dist/app@1.0.js
  13. // @grant GM_getValue
  14. // @grant GM_setValue
  15. // @grant GM.getValue
  16. // @grant GM.setValue
  17. // @grant unsafeWindow
  18. // @grant GM_getResourceText
  19. // @icon https://cdn.jsdelivr.net/gh/ZainCheung/CDN/img/20200428232059.png
  20. // ==/UserScript==
  21. // 获取网页的网址
  22. var articalUrl = window.location.href;
  23. var host = articalUrl.split("article/details/")[0]; // 域名
  24. var artId = articalUrl.split("article/details/")[1].split("?")[0];
  25. // 组装评论请求
  26. var getCommentUrl = host + "phoenix/comment/list/" + artId + "?page=1&size=1000&tree_type=1";
  27. // 当前登陆用户的账号
  28. var myName = document.querySelector("#csdn-toolbar > div > div > div.toolbar-container-right > div > div.toolbar-btn.toolbar-btn-login.csdn-toolbar-fl.toolbar-subMenu-box > a").href.split("blog.csdn.net/")[1];
  29. // 文章的作者账号
  30. var UserName = document.querySelector("#mainBox > main > div.blog-content-box > div > div > div.article-info-box > div.article-bar-top > div > a.follow-nickName").href.split("csdn.net/")[1];
  31. // 文章全文字数
  32. var blogLength = document.querySelector("#article_content").innerText.replace(/\ +/g,"").replace(/[\r\n]/g,"").length;
  33. // 文章阅读量
  34. var blogRead = document.querySelector("#mainBox > main > div.blog-content-box > div > div > div.article-info-box > div.article-bar-top > div > span.read-count").innerText;
  35. // 文章最后发布日期
  36. var blogDate = document.querySelector("#mainBox > main > div.blog-content-box > div > div > div.article-info-box > div.article-bar-top > div > span.time").innerText.slice(0,10);
  37. // 评论文本框
  38. var commentArea = document.querySelector("#comment_content");
  39. // 评论按钮
  40. var commentBtn = document.querySelector("#commentform > div > div.right-box > a > input");
  41. // 是否评论,默认评论
  42. var toComment = true;
  43.  
  44. function init(){
  45. // 新的一天会自动打开点赞开关
  46. if(localStorage.today){
  47. var today = new Date();
  48. if(localStorage.today != today.getDate()){
  49. localStorage.likeSwitch = 100;
  50. localStorage.likeCustom = 100;
  51. localStorage.today = today.getDate();
  52. }
  53. }
  54.  
  55. if(localStorage.likeSwitch == 100){
  56. if(localStorage.likeCustom == 100){
  57. if((parseInt(blogLength) >= parseInt(localStorage.likeWordNumber)) && (parseInt(blogRead) >= parseInt(localStorage.likeReadNumber))){
  58. if((new Date(blogDate).getTime()) >= (new Date(localStorage.likeDate).getTime())){
  59. likeEvent();
  60. }
  61. }
  62. }else{
  63. likeEvent();
  64. }
  65. }
  66.  
  67. if(localStorage.commentSwitch == 100){
  68. if(localStorage.commentCustom == 100){
  69. if((parseInt(blogLength) >= parseInt(localStorage.commentWordNumber)) && (parseInt(blogRead) >= parseInt(localStorage.commentReadNumber))){
  70. if((new Date(blogDate).getTime()) >= (new Date(localStorage.commentDate).getTime())){
  71. commentEvent();
  72. }
  73. }
  74. }else{
  75. commentEvent();
  76. }
  77. }
  78.  
  79. }
  80. // 点赞事件
  81. function likeEvent(){
  82. //没有点赞才自动点赞并且延迟100毫秒后进行评论
  83. var zhan = document.querySelector("#is-like > a");
  84.  
  85. if(document.querySelector("#is-like-img").style.display == "block"){
  86. zhan.click();
  87. var checkFull = window.setInterval(function(){
  88. if(document.querySelector("body > div.skin-boxshadow").style.display == "block"){localStorage.likeSwitch = 0}
  89. },100);
  90. setTimeout(function(){
  91. window.clearInterval(checkFull);
  92. },1000);
  93. }else{ console.warn("已经点过赞了");}
  94. }
  95.  
  96. // 评论事件
  97. function commentEvent(){
  98. var commentTextList = JSON.parse(localStorage.commentList);
  99. var commentText;
  100. if(localStorage.commentRangeSwitch==0){
  101. commentText = commentTextList.R[Math.floor(Math.random()*commentTextList.R.length)].text;
  102. }else{
  103. var count_S = localStorage.commentRange.split(",")[0];
  104. var count_L = localStorage.commentRange.split(",")[1];
  105. if(blogLength<count_S){
  106. commentText = commentTextList.S[Math.floor(Math.random()*commentTextList.S.length)].text;
  107. }else if(blogLength>count_L){
  108. commentText = commentTextList.L[Math.floor(Math.random()*commentTextList.L.length)].text;
  109. }
  110. }
  111.  
  112. setTimeout(function(){
  113. if(myName!=UserName){
  114. // 从页面获取评论列表,但是只能获取第一页
  115. var commentList = document.querySelector('#mainBox > main > div.comment-box > div.comment-list-container > div.comment-list-box');
  116. if(commentList==null){
  117. console.log(commentText);
  118. document.querySelector("#comment_content").value= commentText;
  119. document.querySelector("#commentform > div > div.right-box > a > input").click();
  120. console.log("评论成功!");
  121. }else{
  122. var Imgs = commentList.getElementsByClassName("avatar");
  123. for (let i=0; i<commentList.getElementsByTagName("li").length; i++){
  124. // 在页面的评论列表找到当前登陆用户账号
  125. if(Imgs[i].alt==myName){
  126. toComment = false;
  127. console.log("已经评论过,无需重复评论");
  128. break;
  129. }
  130. }
  131. if(toComment ){
  132. console.log(commentText);
  133. document.querySelector("#comment_content").value= commentText;
  134. document.querySelector("#commentform > div > div.right-box > a > input").click();
  135. console.log("评论成功!");
  136. }
  137. }
  138. }
  139. },500);
  140. }
  141.  
  142. (function() {
  143. init();
  144. })();
  145.  
  146. // 添加Link
  147. function addGlobalLink(rel,href) {
  148. var head, link;
  149. head = document.getElementsByTagName('head')[0];
  150. if (!head) { return; }
  151. link = document.createElement('link');
  152. link.rel = rel;
  153. link.href = href;
  154. head.appendChild(link);
  155. }
  156. // 添加Script
  157. function addGlobalScript(src) {
  158. var body, script;
  159. body = document.getElementsByTagName('body')[0];
  160. if (!body) { return; }
  161. script = document.createElement('script');
  162. script.src = src;
  163. body.appendChild(script);
  164. }
  165.  
  166. addGlobalLink('stylesheet','https://cdn.jsdelivr.net/gh/ZainCheung/CDN/css/element-ui-index.css');
  167. addGlobalLink('stylesheet','https://at.alicdn.com/t/font_1776564_biuc05tmt1k.css');
  168. addGlobalLink('stylesheet','https://cdn.jsdelivr.net/gh/ZainCheung/CSDN-helper/dist/app@1.0.css');
  169. addGlobalScript("https://cdn.jsdelivr.net/gh/ZainCheung/CDN/js/element-ui-index.js");
  170. addGlobalScript("https://cdn.jsdelivr.net/npm/vue");
  171. addGlobalScript("https://unpkg.com/axios/dist/axios.min.js");
  172.  
  173. window.addEventListener(
  174. 'load',
  175. function(){
  176. var appMenu = document.createElement("div");
  177. var vueScript = document.createElement("script");
  178. appMenu.innerHTML = GM_getResourceText("html");
  179. vueScript.innerHTML = GM_getResourceText("js");
  180. var navbar,body;
  181. navbar = document.getElementById('csdn-toolbar');
  182. body = document.getElementsByTagName('body')[0];
  183. if (navbar && body) {
  184. navbar.parentNode.insertBefore(appMenu, navbar.nextSibling);
  185. body.parentNode.insertBefore(vueScript, body.nextSibling);
  186. }
  187. },true);