如何修改JavaScript自动点击书签脚本以支持双自动点击器同时运行?
我正在修改一个基于click事件的JavaScript自动点击书签脚本,目标是让它在Cookie Clicker游戏中同时运行两个自动点击器。这是我第一次写JavaScript,但正在学习Java课程,能自行摸索代码。不过修改后脚本连十字光标都无法显示,请求修复。
原完整代码
//javascript: ...[removed to look cleaner] //^original^ //GOAL: I want two autoclickers to be able to run at the same time //SOLUTION(maybe): change if statement checking if there is already an autoclicker // javascript: var DELAY = 1; var autoClickerStyleElement = document.createElement("style");//here autoClickerStyleElement.innerHTML="*{cursor: crosshair !important;}";//to document.body.appendChild(autoClickerStyleElement);//here sets up style/crosshair function addClicker(e) { if(!e.isTrusted) {//if click event is not trusted return;}//do nothing //THIS IS CODE THAT WAS ALREADY HERE // if(e.target.classList.contains("auto-clicker-target")) {//if there's already one // e.target.classList.remove("auto-clicker-target");}//remove it // else { // e.target.classList.add("auto-clicker-target");}//add target class to the click event's classList //THIS IS AN EDITED VERSION OF THE CODE if(e.target.classList.contains("auto-clicker-target1") && !(e.target.classList.contains("auto-clicker-target2"))) {//if there's 1st & not 2nd e.target.classList.add("auto-clicker-target2");}//add a 2nd //if 1st and 2nd exist, remove both else if(e.target.classList.contains("auto-clicker-target1") && e.target.classList.contains("auto-clicker-target2")){//if it has both e.target.classList.remove("auto-clicker-target1");//remove 1st e.target.classList.remove("auto-clicker-target2");}//remove 2nd //my code compacted: ...[removed to look cleaner] //rewritten full: ...[removed to look cleaner] //WHY NOT WORK? //MAIN EDITED CODE END document.body.removeChild(autoClickerStyleElement);//make crosshair disappear document.body.removeEventListener("click", addClicker);//add clicker e.preventDefault(); autoClick(e.target);//run autoclick where crosshair is clicked }//end of addClicker function autoClick(element) { if(element.classList.contains("auto-clicker-target1")) {//i just duped this part and changed the name element.click();//simulates click setTimeout(function()//set delay for click { autoClick(element); }, DELAY); }//ADDED: if(element.classList.contains("auto-clicker-target2")) { element.click(); setTimeout(function() { autoClick(element); }, DELAY); } } document.body.addEventListener("click", addClicker, 0);//waits for my click to add autoclicker
修改前后代码对比
原有代码
//THIS IS CODE THAT WAS ALREADY HERE // if(e.target.classList.contains("auto-clicker-target")) {//if there's already one // e.target.classList.remove("auto-clicker-target");}//remove it // else { // e.target.classList.add("auto-clicker-target");}//add target class to the click event's classList
修改后的代码
//THIS IS AN EDITED VERSION OF THE CODE if(e.target.classList.contains("auto-clicker-target1") && !(e.target.classList.contains("auto-clicker-target2"))) {//if there's 1st & not 2nd e.target.classList.add("auto-clicker-target2");}//add a 2nd //if 1st and 2nd exist, remove both else if(e.target.classList.contains("auto-clicker-target1") && e.target.classList.contains("auto-clicker-target2")){//if it has both e.target.classList.remove("auto-clicker-target1");//remove 1st e.target.classList.remove("auto-clicker-target2");}//remove 2nd
问题分析
修改后的代码缺失了初始状态的处理逻辑:当第一次点击页面元素时,元素既没有auto-clicker-target1也没有auto-clicker-target2类,此时没有任何代码分支去添加标记类,导致后续autoClick函数没有触发条件。同时,脚本在点击后立刻移除了十字光标样式元素,所以十字光标刚显示就消失,看起来像是完全没生效。
修复后的代码
javascript: var DELAY = 1; var autoClickerStyleElement = document.createElement("style"); autoClickerStyleElement.innerHTML = "*{cursor: crosshair !important;}"; document.body.appendChild(autoClickerStyleElement); function addClicker(e) { if (!e.isTrusted) return; // 补充初始状态处理:第一次点击添加第一个点击器标记 if (!e.target.classList.contains("auto-clicker-target1") && !e.target.classList.contains("auto-clicker-target2")) { e.target.classList.add("auto-clicker-target1"); } // 已有第一个点击器,添加第二个标记 else if (e.target.classList.contains("auto-clicker-target1") && !e.target.classList.contains("auto-clicker-target2")) { e.target.classList.add("auto-clicker-target2"); } // 已有两个点击器,移除所有标记并停止 else if (e.target.classList.contains("auto-clicker-target1") && e.target.classList.contains("auto-clicker-target2")) { e.target.classList.remove("auto-clicker-target1"); e.target.classList.remove("auto-clicker-target2"); // 移除标记后直接结束,避免无效调用autoClick document.body.removeChild(autoClickerStyleElement); document.body.removeEventListener("click", addClicker); e.preventDefault(); return; } document.body.removeChild(autoClickerStyleElement); document.body.removeEventListener("click", addClicker); e.preventDefault(); autoClick(e.target); } function autoClick(element) { // 第一个点击器逻辑 if (element.classList.contains("auto-clicker-target1")) { element.click(); setTimeout(() => autoClick(element), DELAY); } // 第二个点击器逻辑 if (element.classList.contains("auto-clicker-target2")) { element.click(); setTimeout(() => autoClick(element), DELAY); } } document.body.addEventListener("click", addClicker, false);
使用说明
- 将上述代码复制为书签的URL
- 打开Cookie Clicker游戏页面,点击该书签,页面会显示十字光标
- 点击游戏内的目标元素:
- 第一次点击:启动第一个自动点击器
- 第二次点击同一元素:启动第二个自动点击器(实现双倍点击效果)
- 第三次点击同一元素:关闭所有自动点击器
内容的提问来源于stack exchange,提问作者Crashtestdummy
相关产品推荐
相关产品推荐

