You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改JavaScript自动点击书签脚本以支持双自动点击器同时运行?

修复Cookie Clicker双自动点击器书签脚本问题

我正在修改一个基于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);

使用说明

  1. 将上述代码复制为书签的URL
  2. 打开Cookie Clicker游戏页面,点击该书签,页面会显示十字光标
  3. 点击游戏内的目标元素:
    • 第一次点击:启动第一个自动点击器
    • 第二次点击同一元素:启动第二个自动点击器(实现双倍点击效果)
    • 第三次点击同一元素:关闭所有自动点击器

内容的提问来源于stack exchange,提问作者Crashtestdummy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:37:52