小红书弹卡按钮监测

在指定网页上监测弹卡按钮的存在,并点击它

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         小红书弹卡按钮监测
// @namespace    http://xxxxxx.com
// @version      1.1
// @icon         https://bkimg.cdn.bcebos.com/pic/f3d3572c11dfa9ec8a13fb131a9ae003918fa0ec6bd6
// @description  在指定网页上监测弹卡按钮的存在,并点击它
// @author       tunan
// @match        https://redlive.xiaohongshu.com/live_control
// @license MIT
// @grant        none
// ==/UserScript==



(function() {
    'use strict';

    // 获取用户保存的检测时间间隔,如果没有保存则使用默认值
    let checkInterval = localStorage.getItem('checkInterval');
    if (!checkInterval) {
        checkInterval = 5; // 默认5秒
    }

    // 获取用户保存的目标商品序号,如果没有保存则使用默认值
    let targetProductIndex = localStorage.getItem('targetProductIndex');
    if (!targetProductIndex) {
        targetProductIndex = 1; // 默认第一个商品
    }

    // 创建UI
    const ui = document.createElement('div');
    ui.innerHTML = `
        <div style="position: fixed; bottom: 10px; right: 10px; background: white; padding: 10px; border: 1px solid #ccc;">
            <label for="checkInterval">检测时间(秒):</label>
            <input type="number" id="checkInterval" value="${checkInterval}">
            <br>
            <label for="targetProductIndex">目标商品序号:</label>
            <input type="number" id="targetProductIndex" value="${targetProductIndex}" placeholder="输入商品序号">
        </div>
    `;
    document.body.appendChild(ui);

    // 获取UI元素
    const checkIntervalInput = document.getElementById('checkInterval');
    const targetProductIndexInput = document.getElementById('targetProductIndex');

    // 设置检测时间
    checkIntervalInput.addEventListener('change', function() {
        checkInterval = parseInt(checkIntervalInput.value);
        localStorage.setItem('checkInterval', checkInterval); // 保存用户设置的检测时间
    });

    // 设置目标商品序号
    targetProductIndexInput.addEventListener('change', function() {
        targetProductIndex = parseInt(targetProductIndexInput.value);
        localStorage.setItem('targetProductIndex', targetProductIndex); // 保存用户设置的目标商品序号
    });

    // 检测并点击弹卡按钮
    function checkAndClickPopCardButton() {
        console.log('开始检测弹卡按钮...');
        const popCardButtons = document.querySelectorAll('.operation-item span[data-v-d95d4d32]');

        // 点击指定序号的商品的弹卡按钮
        if (targetProductIndex >= 1 && targetProductIndex <= popCardButtons.length) {
            const targetButton = popCardButtons[targetProductIndex - 1];
            console.log(`找到目标商品序号为${targetProductIndex}的弹卡按钮,尝试点击它。`);
            simulateMouseClick(targetButton);
        } else {
            console.log(`目标商品序号${targetProductIndex}无效或超出范围。`);
        }
    }

    // 模拟鼠标点击元素
    function simulateMouseClick(element) {
        const event = document.createEvent('MouseEvent');
        event.initEvent('click', true, true);
        element.dispatchEvent(event);
    }

    // 定期检测弹卡按钮
    setInterval(checkAndClickPopCardButton, checkInterval * 1000);
})();