Greasy Fork

Greasy Fork is available in English.

Universal Fast Shortlink Bypasser (Safe Mode)

Fixed version: Won't auto-skip pagination or redirect prematurely.

当前为 2026-02-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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);
    }

})();