您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hook the wait timers for websites that use them to delay content
// ==UserScript== // @name Time Hooker // @namespace https://tampermonkey.net/ // @version 1.7 // @description Hook the wait timers for websites that use them to delay content // @author Niteesh // @match *://*/* // @grant none // @license MIT // @run-at document-start // ==/UserScript== (function() { 'use strict'; const originalSetInterval = window.setInterval; const originalSetTimeout = window.setTimeout; const cloudflareIndicators = [ "Checking your browser", // Common text "verify your browser", // Additional text "cloudflare", // May appear in class or ID names "turnstile" // Cloudflare CAPTCHA widget class ]; function isCloudflareVerificationPresent() { return [...document.querySelectorAll('*')].some(el => { const text = el.textContent?.toLowerCase() || ""; const idOrClass = (el.id || "") + " " + (el.className || ""); return cloudflareIndicators.some(indicator => text.includes(indicator.toLowerCase()) || idOrClass.toLowerCase().includes(indicator.toLowerCase()) ); }); } function print() { console.log(...arguments); } function clearAllTimers() { const highestIntervalId = setInterval(() => {}, 0); for (let i = 0; i <= highestIntervalId; i++) { clearInterval(i); } const highestTimeoutId = setTimeout(() => {}, 0); for (let i = 0; i <= highestTimeoutId; i++) { clearTimeout(i); } print('Cleared all active timers.'); } function restoreOriginalTimers() { window.setInterval = originalSetInterval; window.setTimeout = originalSetTimeout; print("Restoring done."); } function interceptTimers(val) { window.setTimeout = function(callback, delay, ...args) { const newDelay = delay / val; print(`[Intercepted] setTimeout: ${delay}ms -> ${newDelay}ms`); return originalSetTimeout(callback, newDelay, ...args); }; window.setInterval = function(callback, interval, ...args) { const newInterval = interval / val; print(`[Intercepted] setInterval: ${interval}ms -> ${newInterval}ms`); return originalSetInterval(callback, newInterval, ...args); }; } interceptTimers(15); let timerUsed = false; let potentialTimers; window.onload = function() { potentialTimers = [...document.querySelectorAll('*')].filter(el => { const text = el.textContent.trim().toLowerCase(); const waitRegexes = [ /wait\s+\d+\s+seconds/i, ///please\s+wait/i, /click\s+on\s+(image|button)/i, /click\s+and\s+wait\s+\d+/i ]; return waitRegexes.some(regex => regex.test(text)); //return /wait\s+\d+\s+seconds/i.test(text) || /please\s+wait/i.test(text); }); if (potentialTimers.length > 0) { print("Potential timers detected:", potentialTimers); timerUsed = true; } else { print("No timers detected."); restoreOriginalTimers(); if (isCloudflareVerificationPresent()) { print("Cloudflare verification detected..."); } else { originalSetTimeout(_ => { clearAllTimers(); }, 3000); } } (function () { const overlayClassName = "custom-overlay"; // Function to create and append an overlay on a given element function createOverlay(element) { // Check if the overlay already exists if (element.querySelector(`.${overlayClassName}`)) return; // Create the overlay const overlay = document.createElement('div'); //overlay.textContent = "Overlay"; // Optional: Add text to the overlay overlay.className = overlayClassName; // Style the overlay overlay.style.position = "absolute"; overlay.style.top = "0"; overlay.style.left = "0"; overlay.style.width = "100%"; overlay.style.height = "100%"; overlay.style.backgroundColor = "rgba(255, 0, 0, 0.3)"; // Red overlay with transparency overlay.style.zIndex = "9999"; overlay.style.pointerEvents = "none"; // Allow clicks to pass through overlay.style.display = "flex"; overlay.style.justifyContent = "center"; overlay.style.alignItems = "center"; overlay.style.color = "white"; overlay.style.fontSize = "16px"; // Ensure the parent element has `position: relative` for correct overlay placement const computedStyle = window.getComputedStyle(element); if (computedStyle.position === "static") { element.style.position = "relative"; } // Append the overlay element.appendChild(overlay); element.style.zIndex = 1001; element.style.position = "absolute" element.style.top = '0'; element.style.left = '0'; } const HIGH_Z_INDEX_THRESHOLD = 9999; // Define the threshold for "too high" const ADJUSTED_Z_INDEX = 1000; // Define the new reasonable z-index value // Function to find and adjust high z-index elements function adjustHighZIndex() { const elements = [...document.querySelectorAll('*')]; // Get all elements elements.forEach(el => { if (el == document.querySelectorAll('.overlayClassName')) { return; } const zIndex = window.getComputedStyle(el).zIndex; if (!isNaN(zIndex) && zIndex > HIGH_Z_INDEX_THRESHOLD) { console.log(`Element with high z-index found:`, el); console.log(`Original z-index: ${zIndex}`); el.style.zIndex = ADJUSTED_Z_INDEX; // Adjust the z-index console.log(`Adjusted z-index to: ${ADJUSTED_Z_INDEX}`); } }); } function logLinks() { const targetKeywords = ["continue", "get link"]; // Keywords to match const elements = [...document.querySelectorAll('*')].filter(el => (targetKeywords.some(keyword => el.textContent.toLowerCase().includes(keyword))) && ((el.tagName === 'A' && el.href) || // Standard links (el.tagName === 'BUTTON') || // Buttons with click handlers el.getAttribute('role') === 'link') // Elements with role="link" ); print(elements); elements.forEach(el => { console.log("Found link/button:"); console.log({ tag: el.tagName, text: el.textContent.trim(), href: el.href || "N/A", onclick: el.onclick ? el.onclick.toString() : "N/A" }); }); console.log(`Total links/buttons found: ${elements.length}`); } // Initial log of all links // Function to find all relevant elements and overlay them function overlayLinks() { const targetKeywords = ["continue", "get link"]; const elements = [...document.querySelectorAll('*')].filter(el => targetKeywords.some(keyword => el.textContent.toLowerCase().trim().includes(keyword)) && (el.tagName === 'BUTTON' || el.tagName === 'A' || el.onclick || el.hasAttribute('role')) ); elements.forEach(element => { createOverlay(element); print(element) }); console.log(`${elements.length} elements overlaid.`); } // Initial overlay // Use MutationObserver to handle dynamically added elements if (timerUsed) { adjustHighZIndex(); logLinks(); overlayLinks(); const observer = new MutationObserver(() => { overlayLinks(); logLinks(); adjustHighZIndex() }); observer.observe(document.body, { childList: true, subtree: true }); // Log for debugging console.log("Overlay script is running..."); print("Link logging is active..."); } })(); /* if (timerUsed) { print("setting up..."); originalSetInterval(() => { const button = document.querySelector('button:enabled, .clickable'); let clickable = []; clickable = [...document.querySelectorAll('*')].find(el => (el.textContent.toLowerCase().includes("continue") || el.textContent.toLowerCase().includes("get link") || el.textContent.toLowerCase().includes("robot")) && (el.tagName === 'BUTTON' || el.tagName === 'A') && !el.disabled ); if (clickable) { print("Clickable element found:", clickable); if (clickable.tagName === 'BUTTON') { clickable.click(); } else if (clickable.tagName === 'A') { print(clickable.href); if (clickable.href !== window.location.href) { window.location.replace(clickable.href); } } // else { // print("just trying to click, do you find the exact button?"); // clickable.click(); // } } else { print("No clickable element found."); } }, 1000); // dynamically searching for a button const observer = new MutationObserver((mutations) => { mutations.forEach(mutation => { const button = [...document.querySelectorAll('*')].find(el => (el.textContent.toLowerCase().includes("continue") || el.textContent.toLowerCase().includes("get link")) && (el.tagName === 'BUTTON' || el.tagName === 'A') && !el.disabled ); if (button) { print("Dynamically loaded 'continue' button found:", button); observer.disconnect(); // Stop observing once found button.click(); print("clicked"); } }); }); // Start observing changes in the DOM observer.observe(document.body, { childList: true, subtree: true }); } else { } */ } })();