您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A Simple helper.
当前为
// ==UserScript== // @name sascacci 自动点击器 // @name:en sascacci.com Auto presser // @namespace Violentmonkey Scripts // @homepageURL https://sascacci.com/ // @match https://sascacci.com/touchwaves/* // @grant GM_log // @grant GM_info // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_addValueChangeListener // @version 0.5.0.45 // @inject-into content // @author axototl // @license AGPL-3.0-or-later // @run-at document-idle // @icon https://sascacci.com/favicon.ico // @description A Simple helper. // @description:zh-CN 自动点击,解放你的双手! // @description:en An auto presser to release your hands !!! // @description 自动点击,解放你的双手! // ==/UserScript== 'use strict'; function getValue(name, def) { let t = GM_getValue(name); if (null == t) { t = def; GM_setValue(name, t); } return t; } (() => { if (GM_info.scriptHandler != "Violentmonkey" && getValue("non_alert", true)) { alert("警告:您并没有使用Violentmonkey脚本管理器,这可能会导致一些问题。\n Warn: You did not use Violentmonkey script Manager, something may be not work properly."); GM_openInTab("https://violentmonkey.github.io/get-it/"); GM_setValue("non_alert", false); } })(); const codecs = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111]; const len = codecs.length; let dbg = getValue("debug", false); const canvas = document.getElementById("cvsID"); let keeptime = getValue("keeptime", -500); let rnd = (keeptime < 0); const special2 = !!location.search && new URLSearchParams(location.search).get("typ") == 2; keeptime = Math.abs(keeptime); function press(key) { const conf = { bubbles: true, cancelable: true, keyCode: key }; const ke = new KeyboardEvent('keydown', conf); canvas.dispatchEvent(ke); } function delay(n){ return new Promise(resolve => { setTimeout(resolve,n); }); } let stop = false; let pause = false; async function main () { const len2 = 32; let rnds = new Uint32Array(len2); let idx; const upd = () => (crypto.getRandomValues(len2), idx = 0); upd(); for (;;) { if (stop) return; if (!pause) { if (idx >= len2) upd(); press(codecs[rnds[idx++] % len]); } let nxt = keeptime; if (rnd) nxt = random(nxt); await delay(nxt); } } (() => { // Configure if (special2 && getValue("alert_2", true)) { alert("请不要让标签页处于后台后迅速切换回来, 否则可能会出现声量过大的问题 (之后不再提醒)\n\ Please don't leave tabs in the background and then switch them back immediately, or you may go deaf."); GM_setValue("alert_2", false); } if (getValue("first", true)) { alert(" Click any place to Start!\n 点击任意一处开始自动播放\n 按下pause键暂停\n Press pause to suspend."); GM_setValue("first", false); } canvas.addEventListener("click", listen); function listen(ev) { canvas.removeEventListener("click", listen); main(); } const listener = ev => { // GM_log(ev); const k = ev.keyCode; if (k == 19) pause = !pause; else if (k == 0x73) // Virtual Key Code of F4 unreg(); // if (ev.key == ' ') pause = !pause; }; window.addEventListener("keydown", listener); if (special2) window.onblur = () => pause = true; const props = ["✅ (Enabled) ", "❌ (Disabled) "]; const reg_dbg = () => GM_registerMenuCommand(props[dbg | 0] + "调试模式 (Debug)", () => GM_setValue("debug", !dbg)); let tmp2 = reg_dbg(); GM_addValueChangeListener("debug", (_1, _2, nv) => { GM_unregisterMenuCommand(tmp2); dbg = nv; tmp2 = reg_dbg(); }); const tp3 = GM_registerMenuCommand("暂停/继续 (pause/continue)", () => pause = !pause); const tmp = GM_registerMenuCommand("停止运行 (Stop)", unreg); function unreg() { stop = true; window.removeEventListener("keydown", listener); GM_unregisterMenuCommand(tmp); GM_unregisterMenuCommand(tmp2); GM_unregisterMenuCommand(tp3); } GM_registerMenuCommand("设置间隔 (Time)", () => { let t; do { t = prompt("输入两次之间的时间间隔, 负数将会在每次模拟后 生成 最大为 输入数的相反数 的随机数", keeptime)*1; if (t === null) return; } while(isNaN(t) || 0 == t); GM_setValue("keeptime", t); }); GM_addValueChangeListener("keeptime", (_1, _2, nv) => (rnd = (nv < 0), keeptime = Math.abs(nv))); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址