Greasy Fork is available in English.
Fixed version: Won't auto-skip pagination or redirect prematurely.
当前为
// ==UserScript==
// @name Universal Fast Shortlink Bypasser (Safe Mode)
// @namespace https://violentmonkey.top/
// @version 6.0
// @description Fixed version: Won't auto-skip pagination or redirect prematurely.
// @author Pawan's Assistant
// @match *://*/*
// @run-at document-end
// @grant none
// ==/UserScript==
(function() {
'use strict';
// ⚡ CONFIGURATION
const CONFIG = {
clickDelay: 1000, // Increased delay (1s) to be safer
scanInterval: 1000, // Check every second
// Keywords to click
keywords: [
'skip', 'continue', 'go to link', 'get link',
'proceder', 'continuar', 'human verification',
'click here to', 'get url', 'verify'
],
// "Next" is dangerous, so we treat it specially
riskyKeywords: ['next'],
// Safety Blacklist
blacklist: [
'google', 'youtube', 'facebook', 'instagram', 'netflix',
'amazon', 'bank', 'sbi', 'rrb', 'ibps', 'ssc', 'upsc',
'news', 'blog' // Added specific terms to avoid blogs
]
};
const host = window.location.hostname;
// 🛑 SAFETY CHECK
if (CONFIG.blacklist.some(d => host.includes(d))) return;
const log = (msg) => console.log(`%c[Bypass Safe] ${msg}`, 'color: #00ff00; font-weight: bold;');
// ==========================================
// 🧠 PART 1: PAGINATION DETECTOR (New)
// ==========================================
// Returns TRUE if the button looks like a "Page 1, 2, 3" button
function isPagination(element) {
// Check for "Previous" button nearby (Strong indicator of a blog)
const allButtons = document.body.innerText.toLowerCase();
if (allButtons.includes('previous') || allButtons.includes('prev page')) {
return true;
}
// Check class names for "pagination"
let parent = element.parentElement;
while (parent) {
if (parent.className && typeof parent.className === 'string' && parent.className.toLowerCase().includes('pagination')) {
return true;
}
parent = parent.parentElement;
}
return false;
}
// ==========================================
// 🧠 PART 2: THE SPECIALIST
// ==========================================
function runSpecialist() {
// Ouo.io
if (host.includes('ouo.io') || host.includes('ouo.press')) {
const btn = document.querySelector('#btn-main');
if (btn) { btn.click(); return true; }
}
// GPLinks
if (host.includes('gplinks') || host.includes('desiupload')) {
const timer = document.getElementById('timer');
if (timer) timer.innerText = "0";
const btn = document.querySelector('#get_link, .get-link');
if (btn) { btn.click(); return true; }
}
return false;
}
// ==========================================
// ⚙️ PART 3: THE GENERALIST
// ==========================================
// ⚡ Timer Accelerator
const originalInterval = window.setInterval;
window.setInterval = function(func, delay) {
if (delay === 1000) return originalInterval(func, 10);
return originalInterval(func, delay);
};
function scanGeneric() {
const elements = document.querySelectorAll('button, a, input[type="submit"], div[role="button"]');
for (let el of elements) {
if (el.offsetParent === null) continue;
let text = (el.innerText || el.value || "").toLowerCase().trim();
// Filter junk
if (text.length > 40 || text.includes('login') || text.includes('signup')) continue;
// CHECK 1: Safe Keywords (Always click)
let shouldClick = CONFIG.keywords.some(key => text.includes(key));
// CHECK 2: Risky Keywords ("Next") - Only click if NOT pagination
if (!shouldClick && CONFIG.riskyKeywords.some(key => text === key)) { // Exact match for 'next'
if (!isPagination(el)) {
shouldClick = true;
} else {
log(`Skipped pagination button: "${text}"`);
}
}
if (shouldClick) {
log(`Target found: "${text}"`);
el.style.border = "3px solid #ff0000";
// Stop scanning after finding one
setTimeout(() => { el.click(); }, CONFIG.clickDelay);
break;
}
}
}
// ==========================================
// 🚀 EXECUTION
// ==========================================
// I REMOVED the "window.location.href" redirector here.
// It was causing the auto-jump issue.
if (!runSpecialist()) {
setInterval(scanGeneric, CONFIG.scanInterval);
}
})();