您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Automate the actions on the page
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/458951/1142464/PageAutomator.js
// ==UserScript== // @name PageAutomator // @description Automate the actions on the page // @version 1.0.0 // @author aolko // @match * // @namespace http://greasyfork.icu/ru/users/5008-aolko // @run-at document-start // @grant none // @require https://cdnjs.cloudflare.com/ajax/libs/mousetrap/1.6.5/mousetrap.min.js // ==/UserScript== function PageAutomator() { var Mousetrap = require("mousetrap"); // Mouse events mouse: { this.hover = function (selector) { var element = document.querySelector(selector); element.dispatchEvent(new MouseEvent("mouseover")); }; this.click = function (selector, button) { var element = document.querySelector(selector); if (button === "left") { element.dispatchEvent(new MouseEvent("click")); } else if (button === "right") { element.dispatchEvent(new MouseEvent("contextmenu")); } }; this.scroll = function (amount) { window.scrollBy(0, amount); }; this.scrollTo = function (element) { element.scrollIntoView({ behavior: "smooth", block: "start", inline: "nearest", }); }; this.hold = function (selector, button) { var element = document.querySelector(selector); if (button === "left") { element.dispatchEvent(new MouseEvent("mousedown")); } else if (button === "right") { element.dispatchEvent( new MouseEvent("mousedown", { button: 2, }) ); } }; this.moveToPosition = function (x, y) { window.dispatchEvent( new MouseEvent("mousemove", { clientX: x, clientY: y, }) ); }; this.moveToElement = function (selector) { var element = document.querySelector(selector); var rect = element.getBoundingClientRect(); var x = rect.left + rect.width / 2; var y = rect.top + rect.height / 2; this.moveToPosition(x, y); }; this.getPosition = function () { var position = { x: 0, y: 0, }; document.addEventListener("mousemove", function (event) { position.x = event.clientX; position.y = event.clientY; }); return position; }; } // Keyboard events keyboard: { this.keyPress = function (key) { var event = new KeyboardEvent("keypress", { key: key, }); document.dispatchEvent(event); }; this.keyUp = function (key) { var event = new KeyboardEvent("keyup", { key: key, }); document.dispatchEvent(event); }; this.keyDown = function (key) { var event = new KeyboardEvent("keydown", { key: key, }); document.dispatchEvent(event); }; this.holdKey = function (key, action) { var keys = { ctrl: 17, shift: 16, alt: 18, win: 91, }; var event = new KeyboardEvent("keydown", { keyCode: keys[key], which: keys[key], }); document.dispatchEvent(event); action(); var event = new KeyboardEvent("keyup", { keyCode: keys[key], which: keys[key], }); document.dispatchEvent(event); }; this.holdKeySequence = function (sequence, action) { Mousetrap.bind( sequence, function () { action(); Mousetrap.unbind(sequence); }, "keydown" ); }; this.setKeyState = function (key, state) { if (key === "numlock") { var event = new KeyboardEvent("keydown", { key: "NumLock", code: "NumLock", }); document.dispatchEvent(event); } else if (key === "scrolllock") { var event = new KeyboardEvent("keydown", { key: "ScrollLock", code: "ScrollLock", }); document.dispatchEvent(event); } else if (key === "capslock") { var event = new KeyboardEvent("keydown", { key: "CapsLock", code: "CapsLock", }); document.dispatchEvent(event); } }; } input: { // Block input this.blockInput = function () { document.addEventListener("keydown", function (event) { event.preventDefault(); }); document.addEventListener("mousedown", function (event) { event.preventDefault(); }); }; } timer: { // Timer events this.wait = function (ms) { var start = new Date().getTime(); var end = start; while (end < start + ms) { end = new Date().getTime(); } }; this.waitForElement = function (selector) { var element = document.querySelector(selector); while (!element) { element = document.querySelector(selector); } }; this.waitForMouse = function (cursor) { var currentCursor = document.body.style.cursor; while (currentCursor !== cursor) { currentCursor = document.body.style.cursor; } }; } // Conditionals this.ifElement = function (selector, condition, value) { var element = document.querySelector(selector); if (condition === "contains") { if (element.innerHTML.includes(value)) { return true; } else { return false; } } else if (condition === "does not contain") { if (!element.innerHTML.includes(value)) { return true; } else { return false; } } else if (condition === "is") { if (element.innerHTML === value) { return true; } else { return false; } } else if (condition === "is not") { if (element.innerHTML !== value) { return true; } else { return false; } } }; dialogs: { // Dialogs/Message Boxes this.showNotification = function (title, text) { var notification = new Notification(title, { body: text, }); }; this.showDialog = function (title, text) { var dialog = document.createElement("dialog"); var titleElement = document.createElement("strong"); titleElement.innerHTML = title; var textElement = document.createElement("p"); textElement.innerHTML = text; dialog.appendChild(titleElement); dialog.appendChild(textElement); document.body.appendChild(dialog); dialog.show(); }; this.showCustomDialog = function (html) { var dialog = document.createElement("dialog"); dialog.innerHTML = html; document.body.appendChild(dialog); dialog.show(); }; } clipboard: { // Clipboard this.getClipboardText = function () { return navigator.clipboard.readText().then((text) => { return text; }); }; this.setClipboardText = function (text) { navigator.clipboard.writeText(text); }; this.clearClipboard = function () { navigator.clipboard.writeText(""); }; } }