CSDN博客自动点赞评论助手

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

Fra 29.04.2020. Se den seneste versjonen.

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