// ==UserScript== // @name Indian Shortener Bypass - Complete // @namespace http://tampermonkey.net/ // @version 5.0 // @description automatically bypasses the multi-steps // @author shiva // @match https://indianshortner.in/* // @match https://paidinsurance.in/* // @match https://advupdates.com/* // @match https://indianshortner.com/* // @grant none // @run-at document-end // @license GPL-3.0-only // @downloadURL https://update.greasyfork.icu/scripts/553589/Indian%20Shortener%20Bypass%20-%20Complete.user.js // @updateURL https://update.greasyfork.icu/scripts/553589/Indian%20Shortener%20Bypass%20-%20Complete.meta.js // ==/UserScript== (function() { 'use strict'; const CONFIG = { debug: true, paidInsuranceDelay: 500, advUpdatesDelay: 500, indianShortnerWait: 10000 // Wait 10 seconds for timer to complete }; function log(message, type = 'info') { const prefix = '[BYPASS]'; const timestamp = new Date().toLocaleTimeString(); if (CONFIG.debug) { const emoji = { 'info': 'ℹ️', 'success': '✅', 'error': '❌', 'warn': '⚠️' }[type] || 'ℹ️'; console.log(`${prefix} [${timestamp}] ${emoji}`, message); } } // Click with multiple methods function forceClick(element) { if (!element) return false; try { element.click(); log('Clicked using element.click()', 'success'); return true; } catch (e) { try { const clickEvent = new MouseEvent('click', { view: window, bubbles: true, cancelable: true }); element.dispatchEvent(clickEvent); log('Clicked using dispatchEvent', 'success'); return true; } catch (e2) { log('Click failed: ' + e2.message, 'error'); return false; } } } // Find and click any clickable image or link function findAndClickAnyImage() { const clickableImages = document.querySelectorAll('a img, img[onclick], div[onclick] img'); log(`Found ${clickableImages.length} clickable images on page`, 'info'); for (let i = 0; i < clickableImages.length; i++) { const img = clickableImages[i]; log(`Image ${i}: src=${img.src.substring(0, 50)}... alt="${img.alt}"`, 'info'); } const patterns = [ 'img[alt*="human" i]', 'img[alt*="verification" i]', 'img[alt*="verify" i]', 'img[alt*="click" i]', 'img[alt*="download" i]', 'a > img', 'div[onclick] img' ]; for (let pattern of patterns) { const elements = document.querySelectorAll(pattern); if (elements.length > 0) { const element = elements[0]; const parent = element.closest('a') || element.parentElement; log(`Trying pattern "${pattern}" - found ${elements.length} elements`, 'info'); if (parent && forceClick(parent)) { return true; } if (forceClick(element)) { return true; } } } const contentAreas = ['main', 'article', '.entry-content', '.content', 'body']; for (let selector of contentAreas) { const area = document.querySelector(selector); if (area) { const firstLink = area.querySelector('a img'); if (firstLink) { const parent = firstLink.closest('a'); log(`Clicking first image in ${selector}`, 'info'); if (forceClick(parent || firstLink)) { return true; } } } } return false; } // Clear all timers (only for advupdates.com) function killAllTimers() { log('Clearing all timers on page...', 'info'); const highestId = setInterval(() => {}, 0); for (let i = 0; i < highestId; i++) { clearInterval(i); } log(`Cleared ${highestId} intervals`, 'success'); } // Wait for button text to change from "PLEASE WAIT" to "Get Link" function waitForButtonReady(timeout = 15000) { return new Promise((resolve, reject) => { const startTime = Date.now(); const checkButton = () => { const button = document.querySelector('a.get-link, .btn.get-link'); if (button) { const buttonText = button.textContent.trim(); log(`Button found: "${buttonText}"`, 'info'); // Check if button says "Get Link" (not "PLEASE WAIT") if (buttonText.toLowerCase().includes('get link')) { log('Button is ready (text changed to "Get Link")', 'success'); resolve(button); return; } else if (buttonText.toLowerCase().includes('please wait')) { log(`Button still says "${buttonText}", waiting...`, 'info'); } } if (Date.now() - startTime > timeout) { reject(new Error('Button did not become ready within timeout')); } else { setTimeout(checkButton, 1000); // Check every second } }; checkButton(); }); } const currentURL = window.location.href; log(`Script loaded on: ${currentURL}`); // ========== STEP 1: paidinsurance.in ========== if (currentURL.includes('paidinsurance.in')) { log('STEP 1: paidinsurance.in detected'); setTimeout(() => { const strategies = [ () => document.getElementById('image3'), () => document.querySelector('img[id="image3"]'), () => document.querySelector('img[alt*="DOWNLOAD" i]'), () => document.querySelector('a img') ]; for (let strategy of strategies) { const element = strategy(); if (element) { const target = element.closest('a') || element; if (forceClick(target)) { log('paidinsurance.in bypass complete!', 'success'); return; } } } log('Could not find button on paidinsurance.in', 'error'); }, CONFIG.paidInsuranceDelay); } // ========== STEP 2: advupdates.com ========== else if (currentURL.includes('advupdates.com')) { log('STEP 2: advupdates.com detected'); killAllTimers(); setTimeout(() => { log('Step 2.1: Looking for ANY clickable image/button...', 'info'); let clickCount = 0; let maxClicks = 3; const tryClick = () => { clickCount++; log(`Click attempt ${clickCount}/${maxClicks}`, 'info'); if (findAndClickAnyImage()) { log(`Click ${clickCount} successful!`, 'success'); if (clickCount < maxClicks) { setTimeout(() => { killAllTimers(); tryClick(); }, clickCount === 1 ? 3000 : 1000); } else { log('All clicks complete! Looking for final link...', 'success'); setTimeout(() => { const finalLink = document.getElementById('image3') || document.querySelector('img[alt*="DOWNLOAD" i]') || document.querySelector('a img[id="image3"]'); if (finalLink) { const target = finalLink.closest('a') || finalLink; forceClick(target); log('advupdates.com complete!', 'success'); } else { log('Final link not found - may need manual click', 'warn'); } }, 2000); } } else { log(`Click attempt ${clickCount} failed`, 'error'); if (clickCount < maxClicks) { setTimeout(tryClick, 2000); } else { log('All attempts exhausted. Check console for available images.', 'error'); } } }; tryClick(); }, CONFIG.advUpdatesDelay); } // ========== STEP 3: indianshortner.com ========== else if (currentURL.includes('indianshortner.com')) { log('STEP 3: indianshortner.com detected'); log('Waiting for timer to complete (10 seconds)...', 'info'); // Wait 10 seconds for the timer to complete setTimeout(() => { log('Timer wait complete. Looking for "Get Link" button...', 'info'); // Wait for button text to change from "PLEASE WAIT" to "Get Link" waitForButtonReady(15000) .then(button => { log(`Button ready! Text: "${button.textContent.trim()}"`, 'success'); log('Clicking Get Link button...', 'info'); if (forceClick(button)) { log('🎉 BYPASS COMPLETE! Redirecting to final destination...', 'success'); } else { log('Click failed, trying alternative method...', 'warn'); window.location.href = button.href; } }) .catch(err => { log('Error: ' + err.message, 'error'); log('Trying to click button anyway...', 'warn'); const button = document.querySelector('a.get-link, .btn.get-link'); if (button) { forceClick(button); } else { log('Button not found at all', 'error'); } }); }, CONFIG.indianShortnerWait); } })();