Greasy Fork

Greasy Fork is available in English.

巨量百应循环讲解-鼠标模拟

通过模拟鼠标点击,实现解放双手,自动循环讲解,本脚本由AI编写

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         巨量百应循环讲解-鼠标模拟
// @namespace    http://tampermonkey.net/
// @version      1.7
// @description  通过模拟鼠标点击,实现解放双手,自动循环讲解,本脚本由AI编写
// @author       九思梦
// @match      https://buyin.jinritemai.com/dashboard/live/*
// @match      https://checkcps.com/*
// @match      https://zs.kwaixiaodian.com/page/helper
// @match      https://ark.xiaohongshu.com/live_center_control
// @match      https://channels.weixin.qq.com/platform/live/commodity/*
// @grant        none
// @run-at       document-start
// @license MIT

// @note    2024--7-22/改为'点击循环逻辑为:单击 → 等待7秒 → 单击 → 等待1秒',
// @note    2024--7-31/增加支持小红书、视频号、快手(其实所有的都能支持,自行修改即可)
// @note    2024--7-23/如果加载不出来界面,多刷新几次,只能缩小窗口,不能关闭窗口,缩小窗口后要重新获取鼠标坐标
// @note    2024--7-22/似乎结束点击按钮没用,要停止点击需要刷新浏览器

// ==/UserScript==

(function() {
    'use strict';

    let mainUIVisible = true; // 用于控制UI界面的显示状态
    let clickIntervalId; // 用于存储点击间隔的定时器ID

    // 创建主UI界面
    let mainUI = document.createElement('div');
    mainUI.id = 'mouse-simulator-ui';
    mainUI.style.cssText = `
        position: fixed;
        top: 100px;
        left: 100px;
        width: 300px;
        height: 240px; /* 根据内容调整高度 */
        padding: 20px;
        background-color: #b0d5df;
        border-radius: 5px;
        font-family: Arial, sans-serif;
        color: white;
        z-index: 10000;
        display: flex;
        flex-direction: column;
        align-items: stretch;
        justify-content: space-between;
        box-sizing: border-box;
        cursor: grab;
        user-select: none;
        overflow: hidden;
        display: ${mainUIVisible ? 'flex' : 'none'};
    `;
    document.body.appendChild(mainUI);

    // 实时鼠标位置显示
    let positionDisplay = document.createElement('div');
    positionDisplay.style.marginTop = '20px';
    positionDisplay.textContent = '当前鼠标位置:X - Y';
    mainUI.appendChild(positionDisplay);

    // 鼠标移动事件
    document.addEventListener('mousemove', function(e) {
        positionDisplay.textContent = `当前鼠标位置:X:${e.clientX}, Y:${e.clientY}`;
    });

    // 自定义模拟鼠标点击位置输入框
    let clickPositionX = createInputField('X');
    let clickPositionY = createInputField('Y');
    let inputsContainer = document.createElement('div');
    inputsContainer.style.display = 'flex';
    inputsContainer.style.justifyContent = 'space-between';
    inputsContainer.style.width = '100%';
    inputsContainer.appendChild(clickPositionX);
    inputsContainer.appendChild(clickPositionY);
    mainUI.appendChild(inputsContainer);

    // 开始和结束点击按钮
    let startButton = createButton('开始点击');
    let stopButton = createButton('结束点击', true);
    let buttonsContainer = document.createElement('div');
    buttonsContainer.style.display = 'flex';
    buttonsContainer.style.justifyContent = 'space-between';
    buttonsContainer.style.width = '100%';
    buttonsContainer.appendChild(startButton);
    buttonsContainer.appendChild(stopButton);
    mainUI.appendChild(buttonsContainer);

    // 隐藏/显示按钮
let toggleButton = createButton('显示界面');
toggleButton.style.position = 'fixed';
toggleButton.style.top = '50px';
toggleButton.style.right = '10px';
toggleButton.style.zIndex = '10001';
toggleButton.style.width = '120px'; // 设置按钮宽度为120px
toggleButton.style.height = '50px'; // 设置按钮高度为50px
toggleButton.style.fontSize = '16px'; // 根据需要调整字体大小以适应按钮大小
document.body.appendChild(toggleButton);
toggleButton.addEventListener('click', function() {
    mainUIVisible = !mainUIVisible;
    mainUI.style.display = mainUIVisible ? 'flex' : 'none';
    toggleButton.textContent = mainUIVisible ? '隐藏界面' : '显示界面';
});

    // 拖拽功能
    let isDragging = false;
    let dragStartX, dragStartY, uiStartX, uiStartY;

    // 为拖拽添加mousedown事件监听器
    mainUI.addEventListener('mousedown', function(e) {
        isDragging = true;
        const rect = mainUI.getBoundingClientRect();
        dragStartX = e.clientX - rect.left;
        dragStartY = e.clientY - rect.top;
        uiStartX = window.scrollX + rect.left;
        uiStartY = window.scrollY + rect.top;
    });

    // 为document添加mousemove事件监听器
    document.addEventListener('mousemove', function(e) {
        if (isDragging) {
            let newLeft = e.clientX - dragStartX + window.scrollX;
            let newTop = e.clientY - dragStartY + window.scrollY;

            // 限制窗口在浏览器视窗范围内
            newLeft = Math.max(0, Math.min(window.innerWidth - mainUI.offsetWidth, newLeft));
            newTop = Math.max(0, Math.min(window.innerHeight - mainUI.offsetHeight, newTop));

            mainUI.style.left = `${newLeft}px`;
            mainUI.style.top = `${newTop}px`;
        }
    });

    // 为document添加mouseup事件监听器
    document.addEventListener('mouseup', function() {
        isDragging = false;
    });

   // 模拟点击逻辑
    function startClickSequence() {
        const x = clickPositionX.valueAsNumber || 0;
        const y = clickPositionY.valueAsNumber || 0;

        if (x && y) {
            startButton.disabled = true;
            stopButton.disabled = false;

            click(); // 执行第一次点击

            function click() {
                triggerMouseEvent(x, y); // 触发点击事件
                clickIntervalId = setTimeout(function() {
                    triggerMouseEvent(x, y); // 7秒后再次点击
                    setTimeout(function() {
                        triggerMouseEvent(x, y); // 1秒后再次点击
                        click(); // 然后再次循环
                    }, 1000);
                }, 7000);
            }
        } else {
            alert('请填写X和Y坐标!');
        }
    }

    function stopClickSequence() {
        clearTimeout(clickIntervalId); // 清除定时器
        clickIntervalId = null;
        startButton.disabled = false;
        stopButton.disabled = true;
    }

    startButton.addEventListener('click', startClickSequence);
    stopButton.addEventListener('click', stopClickSequence);

    // 触发鼠标点击事件
    function triggerMouseEvent(x, y) {
        let event = new MouseEvent('click', {
            bubbles: true,
            cancelable: true,
            clientX: x,
            clientY: y
        });
        let element = document.elementFromPoint(x, y) || document.body;
        element.dispatchEvent(event);
    }

   // 辅助函数:创建输入框
function createInputField(placeholder) {
    let input = document.createElement('input');
    input.type = 'number';
    input.placeholder = placeholder;
    input.style.cssText = `
        width: calc(50% - 10px);
        padding: 10px;
        margin: 10px;
        font-size: 14px;
        text-align: center;
        background-color: white; /* 设置输入框的背景颜色为白色 */
        color: black; /* 设置输入框内文本的颜色为黑色 */
        border: 1px solid gray; /* 可选:添加边框以增强视觉效果 */
        border-radius: 5px; /* 可选:添加边框圆角 */
    `;
    return input;
}

    // 辅助函数:创建按钮
    function createButton(title, disabled) {
        let button = document.createElement('button');
        button.textContent = title;
        button.style.cssText = `
            width: 45%;
            padding: 10px;
            margin: 2%;
            font-size: 14px;
            background-color: #b2bbbe;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        `;
        if (disabled) {
            button.disabled = true;
        }
        return button;
    }

    // 添加描述点击循环逻辑的文字
let loopDescription = document.createElement('div');
loopDescription.style.cssText = `
    margin-top: auto; /* 将文本推至底部 */
    font-size: 14px; /* 文本大小 */
    text-align: center; /* 文本居中对齐 */
    color: black; /* 文本颜色 */
`;
loopDescription.textContent = '点击循环逻辑为:单击 → 等待7秒 → 单击 → 等待1秒';
mainUI.appendChild(loopDescription);

})();