Like Automator

This is a "like" automator (first N posts only).

目前為 2024-10-07 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Like Automator
// @namespace    http://tampermonkey.net/
// @version      2.6
// @description  This is a "like" automator (first N posts only).
// @author       biganthonymo
// @match        https://x.com/*/status/*
// @icon              data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTIyLjg4IDExNC40MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTIyLjg4IDExNC40MiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKCS5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRUU0ODU2O30KCS5zdDF7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGO30KXV0+PC9zdHlsZT48Zz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNOS4zMiwwaDEwNC4yNGM1LjEzLDAsOS4zMiw0LjIsOS4zMiw5LjMydjczLjYyYzAsNS4xMS00LjIxLDkuMzItOS4zMiw5LjMySDgzLjg0bC0xNi4xNywxOS4wNiBjLTMuNTgsNC4yMy05LjQ1LDQuMDQtMTIuODEsMEwzOS4wNCw5Mi4yNkg5LjMyQzQuMjEsOTIuMjYsMCw4OC4wNywwLDgyLjk0VjkuMzJDMCw0LjE5LDQuMTksMCw5LjMyLDBMOS4zMiwweiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02MS4yLDMwLjQyYzMuNTMtMy42OCw2LTYuMTcsMTEuNDMtNi43OWMxMC4yLTEuMTcsMjAuMjcsOS4yNywxNS4xMiwxOS41NmMtMS45LDMuNzktOC40OSwxMC4xNi0xMy43NiwxNS4xNSBjLTIuMDEsMS45LTMuODMsMy42MS01LjEyLDQuODlsLTcuNjYsNy42bC02LjMzLTYuMDljLTEuOTEtMS44My00LjE2LTMuNzktNi40Ni01Ljg3QzQxLjUsNTIuNjQsMzQuMDUsNDUuMywzMy43NCwzNi43MyBjLTAuMjktOC4wMSw2LjcyLTEzLjE1LDE0LTEzLjA2QzU0LjIsMjMuNzYsNTYuOTIsMjYuMjUsNjEuMiwzMC40Mkw2MS4yLDMwLjQyeiIvPjwvZz48L3N2Zz4=
// @grant        none
// @license MIT

// ==/UserScript==

(function() {
    'use strict';

    // Function to get random delay
    function getRandomDelay() {
        return Math.floor(Math.random() * 400) + 100; // Random delay between 100 and 500 ms
    }

    function simulatePageDown() {
        // Scroll down by the height of the viewport
        window.scrollBy(0, window.innerHeight);
    }

    function scrollDownMultipleTimes(times, delay) {
        for (let i = 0; i < times; i++) {
            setTimeout(function() {
                simulatePageDown();
            }, i * delay);
        }
    }

    function simulatePageUp() {
        // Scroll up by the height of the viewport
        window.scrollBy(0, -window.innerHeight);
    }

    function scrollUpMultipleTimes(times, delay) {
        for (let i = 0; i < times; i++) {
            setTimeout(function() {
                simulatePageUp();
            }, i * delay);
        }
    }

    // Create the floating button
    const floatButton = document.createElement('button');
    floatButton.innerText = 'Like Automator';
    Object.assign(floatButton.style, {
        position: 'fixed',
        bottom: '20px',
        left: '20px',
        zIndex: '9999',
        padding: '10px',
        backgroundColor: '#007bff',
        color: '#fff',
        border: 'none',
        borderRadius: '5px',
        cursor: 'pointer'
    });

    document.body.appendChild(floatButton);

    floatButton.addEventListener('click', function() {
        const buttons = document.querySelectorAll('[data-testid="like"]');
        let clickedCount = 0;
        //scrollDownMultipleTimes(8, 500); //Scrool down a few times to load more elements
        //scrollUpMultipleTimes(8, 100);

        function processButton(i) {
            if (i >= buttons.length || i >= 50) {
                return; // Stop if we've reached the end
            }

            // Scroll to the button so it becomes visible
            buttons[i].scrollIntoView({
                behavior: 'smooth',
                block: 'center'
            });

            // After scrolling, wait a bit before clicking
            setTimeout(function() {
                buttons[i].click();
                clickedCount++;

                // Update the floating button's text to show how many clicks have happened so far
                floatButton.innerText = `Like Automator (${clickedCount} / ${buttons.length - 1})`; //The 1st does not count

                // Process the next button after a random delay
                setTimeout(function() {
                    processButton(i + 1);
                }, getRandomDelay());
            }, 500); // Wait 500ms after scrolling before clicking
        }

        processButton(1); // Starting from 1 (the 2nd)
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址