您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-blocks users on Twitter.com with a START/STOP button and an accurate visual counter.
- // ==UserScript==
- // @name Twitter Auto-Blocker (With Counter)
- // @namespace http://tampermonkey.net/
- // @version 0.3
- // @description Auto-blocks users on Twitter.com with a START/STOP button and an accurate visual counter.
- // @author Rue
- // @match https://twitter.com/*
- // @grant none
- // ==/UserScript==
- (async () => {
- // Configuration
- const maxBlocks = 500;
- const delayRange = [100, 200]; // Random delay range in milliseconds
- const clickDelayRange = [20, 40]; // Random click delay range in milliseconds
- // Variables
- let totalBlocked = 0;
- let isRunning = false;
- // UI Elements
- const counterElement = document.createElement('div');
- counterElement.style.position = 'fixed';
- counterElement.style.top = '10px';
- counterElement.style.right = '10px';
- counterElement.style.backgroundColor = 'white';
- counterElement.style.padding = '20px';
- counterElement.style.borderRadius = '5px';
- counterElement.style.fontSize = '36px';
- counterElement.style.fontWeight = 'bold';
- counterElement.style.color = 'red';
- counterElement.textContent = `Blocked: ${totalBlocked}`;
- document.body.appendChild(counterElement);
- const startStopButton = document.createElement('button');
- startStopButton.style.position = 'fixed';
- startStopButton.style.top = '80px';
- startStopButton.style.left = '10px';
- startStopButton.style.backgroundColor = 'green';
- startStopButton.style.color = 'white';
- startStopButton.style.padding = '10px';
- startStopButton.style.borderRadius = '5px';
- startStopButton.style.fontSize = '18px';
- startStopButton.textContent = 'Start';
- startStopButton.addEventListener('click', () => {
- isRunning = !isRunning;
- startStopButton.textContent = isRunning ? 'Stop' : 'Start';
- if (isRunning) {
- autoBlockUsers();
- } else {
- alert(`Stopped auto-blocking. ${totalBlocked} users blocked.`);
- }
- });
- document.body.appendChild(startStopButton);
- // Functions
- async function delay(ms) {
- await new Promise(resolve => {
- setTimeout(() => {
- resolve();
- }, Math.floor(ms + Math.random() * (delayRange[1] - delayRange[0])));
- });
- }
- async function scrollDown() {
- await new Promise(resolve => {
- let start = performance.now();
- let scrollInterval = setInterval(() => {
- let timePassed = performance.now() - start;
- if (timePassed > 1000) {
- clearInterval(scrollInterval);
- resolve();
- } else {
- window.scrollBy(0, 9 + Math.floor(Math.random() * 3));
- }
- }, 10);
- });
- }
- async function autoBlockUsers() {
- while (isRunning && totalBlocked < maxBlocks) {
- let users = document.querySelectorAll('div[data-testid="UserCell"]');
- let count = users.length;
- let blockedCount = 0;
- for (let user of users) {
- if (user.querySelector('div[data-testid$="-unblock"]')) continue;
- user.click();
- await delay(clickDelayRange[0] + Math.random() * (clickDelayRange[1] - clickDelayRange[0]));
- let unblockConfirmation = document.querySelector("[data-testid=userActions]");
- if (!unblockConfirmation) continue;
- unblockConfirmation.click();
- await delay(clickDelayRange[0] + Math.random() * (clickDelayRange[1] - clickDelayRange[0]));
- let blockButton = document.querySelector("[data-testid=block]");
- if (blockButton) {
- blockButton.click();
- await delay(clickDelayRange[0] + Math.random() * (clickDelayRange[1] - clickDelayRange[0]));
- let confirmButton = document.querySelector("[data-testid=confirmationSheetConfirm]");
- if (confirmButton) {
- confirmButton.click();
- await delay(clickDelayRange[0] + Math.random() * (clickDelayRange[1] - clickDelayRange[0]));
- let backButton = document.querySelector("[data-testid=app-bar-back]");
- if (backButton) {
- backButton.click();
- await delay(clickDelayRange[0] + Math.random() * (clickDelayRange[1] - clickDelayRange[0]));
- blockedCount++; // Increment blocked count only if block was successful
- }
- }
- }
- }
- await scrollDown();
- console.log(`Blocked ${blockedCount} users. Total blocked: ${totalBlocked + blockedCount}`);
- totalBlocked += blockedCount;
- counterElement.textContent = `Blocked: ${totalBlocked}`;
- if (totalBlocked >= maxBlocks) {
- isRunning = false;
- startStopButton.textContent = 'Start';
- alert(`Maximum block limit of ${maxBlocks} reached.`);
- }
- }
- }
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址