您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
CSDN未登录(不可用)复制、复制代码不带原文链接、禁用登录(不可用)弹窗、未登录(不可用)查看所有评论、评论完全展开
// ==UserScript== // @name CSDN助手 // @namespace http://tampermonkey.net/ // @version 0.41 // @description CSDN未登录(不可用)复制、复制代码不带原文链接、禁用登录(不可用)弹窗、未登录(不可用)查看所有评论、评论完全展开 // @author Gandalf_jiajun // @include https://blog.csdn.net/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @note 2022.01.28 更新禁用提示登录(不可用)弹窗。 // @note 2022.01.29 更新评论区子项显示及自动展开。 // @note 2022.01.30 V0.21 更新评论区表情包显示异常。 // @note 2022.01.31 V0.22 修复评论区样式显示异常问题。 // @note 2022.02.15 V0.31 破解阅读文章必须关注作者功能。 // @note 2022.03.01 v0.40 随机cookie欺骗。伪造登录(不可用)屏蔽弹窗。 // @note 2022.03.06 v0.41 删除随机cookie欺骗。优化伪造hide_login cookie登录(不可用)屏蔽弹窗。修复bug。 //觉得本脚本还可以的可以给个好评,觉得有问题的可以留言,谢谢各位! // ==/UserScript== (function() { 'use strict'; const appendStyle = (tagArr) => { tagArr.forEach(element => { element.style.userSelect = 'text'; element.style.webkitUserSelect = 'text'; }); }; const translateParams = (params) => { let str = '?'; for(let i in params) { str += i + '=' + params[i] + '&'; } return str.substring(0, str.length - 1); }; const request = (method, url, params) => { return new Promise((resolve, reject) => { let newUrl = params ? url + translateParams(params) : url; const xml = new XMLHttpRequest; xml.open(method, newUrl, true); xml.send(); xml.onreadystatechange = () => { if(xml.readyState == 4 && xml.status == 200) { resolve(JSON.parse(xml.responseText)); } }; }) }; let tag_a = document.querySelectorAll('#content_views pre'); let tag_b = document.querySelectorAll('#content_views pre code'); let domMask = document.querySelector('.hide-article-box') || null; // console.log(tag_a, tag_b); appendStyle(tag_a); appendStyle(tag_b); const getCompleteDom = () => { if (domMask) { let completeDom = document.querySelectorAll('#article_content')[0]; completeDom.style.height = "inherit"; completeDom.style.overflow = "auto"; domMask.innerHTML = ""; domMask.style.display = "none"; } }; // 替换表情包 const replaceDoge = (str) => { // [face]emoji:062.png[/face] return str.replace(/\[face\]([^\]]+):([^\[]+)\[\/face\]/g, `<img src="//g.csdnimg.cn/static/face/$1/$2" alt="表情包"/>`) }; const replaceComment = (str) => { let newCom; newCom = replaceDoge(str); return newCom; }; // 生成子项dom const createSubDom = (arr) => { let dom = `<li class="replay-box" style="display:block;padding-left: 32px;"><ul class="comment-list" style="margin: 0;padding: 0;margin: 0;border: 0;">`; arr.forEach((v) => { let contentDom = `<li style="display: block;margin: 0;" class="comment-line-box comment-line-box-hide" data-commentid="${v.commentId}" data-replyname="qq_23611043"> <div class="comment-list-item" style=" display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; "> <a class="comment-list-href" target="_blank" href="https://blog.csdn.net/${v.userName}" style=" padding-top: 0; height: 24px; "> <img src="${v.avatar}" username="${v.userName}" alt="${v.userName}" class="avatar"> </a> <div class="right-box " style=" padding-bottom: 14px; width: 100%; margin-left: 8px; "> <div class="new-info-box clearfix"> <div class="comment-top" style=" display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; margin-bottom: 4px; line-height: 20px; font-size: 14px; "> <div class="user-box" style=" flex: 1; "> <a class="name-href" target="_blank" href="https://blog.csdn.net/${v.userName}"> <span class="name mr-8">${v.userName}</span> </a> <span class="text">回复</span> <span class="nick-name"> ${v.parentUserName}</span> <span class="date" title="${v.postTime}">${v.dateFormat}</span> </div> <div class="opt-comment" style=" display: none; "> <a class="btn-bt btn-report"> <img class="btn-report-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLookMore.png" title=""> <div class="hide-box"> <span data-type="report" class="hide-item hide-report"> 举报</span> </div> </a> <img class="comment_img_replay" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCommentReplyWhite.png"> <a class="btn-bt btn-reply" data-type="reply" data-flag="true">回复</a> </div> <div class="comment-like " data-commentid="${v.commentId}"> <img class="comment-like-img unclickImg" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLikeWhite.png" title="点赞"> <img class="comment-like-img comment-like-img-hover" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLikeHover.png" title="点赞"> <img class="comment-like-img clickedImg" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLikeActive.png" title="取消点赞"> <span></span> </div> </div> <div class="comment-center"> <div class="new-comment"> <div class="new-comment">${v.content ? replaceComment(v.content) : ``}</div> </div> </div> </div> </div> </div> </li>`; dom += contentDom; }); dom += `</li></ul>`; return dom; }; // 生成dom const createDom = (arr) => { let dom = `<div class="comment-list-box">`; // </div> arr.forEach((v, i) => { let commentDom = `<ul class="comment-list" style=" border: 0; margin: 0; "> <li class="comment-line-box " style="margin: 0;" data-commentid="${v.info.commentId}" data-replyname="${v.info.parentUserName}"> <div class="comment-list-item" style="display: flex;width: 100%;"> <a class="comment-list-href" style="display: block;padding-top: 15px;height: 48px;" target="_blank" href="https://blog.csdn.net/${v.info.userName}"> <img src=${v.info.avatar} username=${v.info.userName} alt=${v.info.userName} class="avatar" style=" display: block; width: 32px; height: 32px; border-radius: 50%; border: 1px solid #e8e8ed; "> </a> <div class="right-box" style=" border-top: 1px solid #e8e8ed; padding-top: 14px; padding-bottom: 14px; width: 100%; margin-left: 8px; "> <div class="new-info-box clearfix"> <div class="comment-top" style=" display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; margin-bottom: 4px; line-height: 20px; font-size: 14px; "> <div class="user-box" style=" -webkit-box-flex: 1; -ms-flex: 1; flex: 1; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; "> <a class="name-href" target="_blank" href="https://blog.csdn.net/${v.info.userName}"> <span class="name ">${v.info.nickName}</span> </a> <span class="date" title="${v.info.postTime}">${v.info.dateFormat}</span> </div> <div class="opt-comment" style=" line-height: 20px; height: 20px; display: none; "> <a class="btn-bt btn-report"> <img class="btn-report-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLookMore.png" title=""> <div class="hide-box"> <span data-type="report" class="hide-item hide-report"> 举报</span> </div> </a> <img class="comment_img_replay" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCommentReplyWhite.png"> <a class="btn-bt btn-reply" data-type="reply" data-flag="true">回复</a> </div> <div class="comment-like " data-commentid="${v.info.commentId}"> <img class="comment-like-img unclickImg" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLikeWhite.png" title="点赞"> <img class="comment-like-img comment-like-img-hover" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLikeHover.png" title="点赞"> <img class="comment-like-img clickedImg" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentLikeActive.png" title="取消点赞"> <span></span> </div> </div> <div class="comment-center"> <div class="new-comment">${v.info.content ? replaceComment(v.info.content): ``}</div> </div> </div> </div> </div> </li> ${v.sub.length>0 ? createSubDom(v.sub) : ``} </ul>`; dom += commentDom; }) dom += `</div>`; return dom; }; // 获取评论 const getComment = async () => { try { let articalId = window.location.href.split('/article/details/')[1].split('?')[0]; let commentUrl = '/phoenix/web/v1/comment/list/' + articalId; let params = { page: 1, size: 999, fold: 'unfold', commentId: '' }; const res = await request('post', commentUrl, params); let dom = createDom(res.data.list); let parentNode = document.getElementsByClassName('comment-list-container')[0]; let parentNode_chrome = document.getElementsByClassName('unlogin-comment-box-new')[0]; if (parentNode_chrome && window.navigator.userAgent.indexOf('Chrome')) { // 判断是否为谷歌浏览器 parentNode_chrome.innerHTML = `<div class="comment-title">评论<span>${res.data.count}</span></div>` + dom; } else { parentNode.innerHTML = dom; } } catch(err) { console.log(err); } }; const setCookie = (key, value, path, domain) => { const time = 4 * 30 * 24 * 60 * 60 * 1000; const date = new Date(+new Date + time).toUTCString(); document.cookie = `${key}=${value};path=${path};domain=${domain};expires=${date}` } const setHideLogin = () => { const cookieArr = document.cookie.split('; '); if (cookieArr.includes("hide_login=2")) { return } else { setCookie('hide_login', 2, '/', '.csdn.net') location.href = location.href } } setTimeout(() => { getCompleteDom(); getComment(); window.csdn ? window.csdn.copyright.init('', '') : ''; window.csdn.loginBox.show = function() {}; setHideLogin(); }, 0); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址