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

JavaScript/Tampermonkey特定坐标自动点击代码失效求助

问题排查与修复方案

原代码存在的核心问题

  1. 时间间隔设置错误:需求是每分钟执行,但代码用了65000毫秒(65秒),不符合预期
  2. 无错误处理逻辑:如果目标坐标处无元素、元素被遮挡,或浏览器禁止自动点击,document.elementFromPoint(x,y).click()会直接抛出错误,导致后续定时器完全失效
  3. 未考虑页面滚动:elementFromPoint的坐标基于浏览器视口而非整个文档,页面滚动后原坐标对应的元素会偏离
  4. 部分页面拦截直接调用.click():一些网站会检测并禁止脚本触发的简单点击操作

修复后的代码

(function() {
    'use strict';

    function performClick() {
        var x = 100; 
        var y = 100;

        // 如果你的坐标是相对于文档顶部的(而非视口),开启下面两行转换
        // const scrollX = window.scrollX || document.documentElement.scrollLeft;
        // const scrollY = window.scrollY || document.documentElement.scrollTop;
        // const targetX = x + scrollX;
        // const targetY = y + scrollY;

        // 用视口坐标直接操作,不需要转换则用下面两行
        const targetX = x;
        const targetY = y;

        try {
            const element = document.elementFromPoint(targetX, targetY);
            if (element) {
                // 模拟真实鼠标点击,降低被拦截概率
                const clickEvent = new MouseEvent('click', {
                    bubbles: true,
                    cancelable: true,
                    view: window
                });
                element.dispatchEvent(clickEvent);
                console.log('点击成功,目标元素:', element);
            } else {
                console.log('目标坐标处未找到可点击元素');
            }
        } catch (err) {
            console.error('点击执行失败:', err);
        }
    }

    // 设置为每分钟(60000毫秒)执行一次
    setInterval(performClick, 60000);
})();

额外排查步骤

  • 按F12打开浏览器控制台,查看是否有报错信息,这是定位问题最快的方式
  • 在控制台直接执行document.elementFromPoint(100,100),确认返回的元素是否是你需要点击的对象,如果不是,说明坐标设置有误
  • 如果页面有滚动行为,一定要开启代码中坐标转换的部分,把文档坐标转换成视口坐标
  • 如果还是无法点击,可能是目标元素有事件监听限制,或者浏览器的安全策略拦截,可以尝试在控制台手动执行点击代码,验证是否能触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:32:33