您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动点击红心
// ==UserScript== // @name 知乎圈子点赞工具2 // @name:en zhihu-like // @namespace http://sunzehui.github.io/ // @version 0.3 // @description 自动点击红心 // @description:en auto like-btn click // @author sunzehui // @match *://*.zhihu.com/club/* // @run-at document-idle // ==/UserScript== async function sleep(time){ return await new Promise(resolve=>{ setTimeout(resolve,time) }) } function hasClass(element, cls) { return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1; } //自动签到 sleep(2000).then(function () { chicken_btn = document.querySelector("#root > div > main > div > div.ClubHeaderInfo > div.ClubHeaderInfo-container > div.ClubHeaderInfo-buttonGroup > button") chicken_btn.click() }) // 点红心 function likeClick(){ return new Promise((resolve, reject) => { let elem = document.querySelector(`#root > div > main > div > div.Club-container > div.Club-mainColumn > div > div.ClubPostList > div > section:nth-child(2) > div.PostItem-footer > div > div.css-2imjyh > div`) console.log(elem) if (!hasClass(elem, "PostReactionItem-chosen")) { elem.click() resolve(true) } reject(false) }) } //点关注 function Follow() { return new Promise((resolve, reject) => { let elem = document.querySelector(`#root > div > main > div > div.Club-container > div.Club-mainColumn > div > div.ClubPostList > div > section:nth-child(2) > div.PostItem-head.PostItem-webHead > button > div`) if(elem!=null){ elem.click() resolve(true) } reject(false) }) } //评论 function commentClick(time) { return new Promise((resolve, reject) => { document.querySelector(`#root > div > main > div > div.Club-container > div.Club-mainColumn > div > div.ClubPostList > div > section:nth-child(2) > div.PostItem-footer > div > button`).click() resolve(true) }) } //点击展开 function showAll(time) { return new Promise((resolve, reject) => { document.querySelectorAll(".CommentMoreReplyButton Button").forEach((res) => { res.click() }) resolve(true) }) } //点击 赞 function zanClick(time) { return new Promise((resolve, reject) => { document.querySelectorAll(".CommentItemV2-likeBtn").forEach((res) => { if (!hasClass(res, "is-liked")) { res.click() } }) resolve(true) }) } //关闭 function closeClik(time) { return new Promise((resolve, reject) => { document.querySelector(".Modal-closeButton").click() resolve(true) }) } //删除 function deleteNode(time) { return new Promise((resolve, reject) => { document.querySelector(`#root > div > main > div > div.Club-container > div.Club-mainColumn > div > div.ClubPostList > div > section:nth-child(2)`).remove() if (document.querySelectorAll(`#root > div > main > div > div.Club-container > div.Club-mainColumn > div > div.ClubPostList > div > section`).length <= 2) { window.scrollTo(0, 200000000) reject(false) } resolve(true) }) } async function executer(callback,print,T,F){ try{ await callback() print.call(null,T) }catch{ print.call(null,F) } } async function main(){ await executer(likeClick,console.log,"点红心成功啦!","点红心失败可能是已经点过"); await sleep(100) await executer(Follow,console.log,"关注成功啦!","关注失败可能是已经关注了"); await sleep(200) await executer(commentClick,console.log,"评论点击成功啦!","评论出错"); await sleep(1000) await executer(zanClick,console.log,"点赞成功啦!","点赞失败可能已经点过"); await sleep(1000) await executer(closeClik,console.log,"关闭窗口成功啦!","关闭出错"); await sleep(200) await executer(deleteNode,console.log,"删除节点成功!","元素数量不足滑动刷新"); } let interval; let isOn = false; let nav = document.querySelector("#root > div > main > div > div.ClubHeaderInfo > div.ClubHeaderInfo-container") let mybtn = document.createElement("button") mybtn.style = `width:200px;height:50px;background-color:white;color:#0084ff;font-size: 14px width: 88px; height: 34px; border-radius: 5px; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; background: #fff; font-weight: 600;` mybtn.innerHTML = "开始点赞" mybtn.addEventListener("click", (event) => { if (!isOn) { interval = setInterval(function () { main() }, 5000) isOn = true; thisTime = 5 showTime = setInterval(function () { mybtn.innerHTML = thisTime.toString() thisTime-- }, 1000) setTimeout(function () { clearInterval(showTime) mybtn.innerHTML = "结束点赞" }, 5000) } else { clearInterval(interval) isOn = false; mybtn.innerHTML = "开始点赞" } }) nav.appendChild(mybtn)