Size
4.8 KB
Version
1.1.1
Created
Nov 20, 2025
Updated
26 days ago
1// ==UserScript==
2// @name Extension for www.hypedrop.com
3// @description A new extension
4// @version 1.1.1
5// @match https://*.hypedrop.com/*
6// ==/UserScript==
7(function() {
8 'use strict';
9
10 console.log('Cloudflare Auto-Click Extension iniciada');
11
12 // Función para hacer click en el checkbox de Cloudflare
13 function clickCloudflareCheckbox() {
14 // Selectores específicos para el checkbox de Cloudflare
15 const selectors = [
16 'input[type="checkbox"][id*="challenge"]',
17 'input[type="checkbox"].ctp-checkbox-label',
18 'input[type="checkbox"][name="cf-turnstile-response"]',
19 'iframe[src*="challenges.cloudflare.com"]',
20 '#cf-stage input[type="checkbox"]',
21 '.main-wrapper input[type="checkbox"]',
22 'input.ctp-checkbox-label[type="checkbox"]'
23 ];
24
25 // Intentar encontrar y hacer click en el checkbox directamente
26 for (const selector of selectors) {
27 const checkbox = document.querySelector(selector);
28 if (checkbox && checkbox.offsetParent !== null) {
29 console.log('Checkbox de Cloudflare encontrado:', selector);
30 checkbox.click();
31 return true;
32 }
33 }
34
35 // Buscar en iframes (Cloudflare usa iframes para el challenge)
36 const iframes = document.querySelectorAll('iframe');
37 for (const iframe of iframes) {
38 try {
39 if (iframe.src.includes('cloudflare') || iframe.src.includes('challenges')) {
40 console.log('iframe de Cloudflare encontrado');
41 // Intentar hacer click en el iframe mismo
42 iframe.click();
43
44 // Intentar acceder al contenido del iframe
45 try {
46 const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
47 const iframeCheckbox = iframeDoc.querySelector('input[type="checkbox"]');
48 if (iframeCheckbox) {
49 console.log('Checkbox dentro del iframe encontrado');
50 iframeCheckbox.click();
51 return true;
52 }
53 } catch (e) {
54 console.log('No se puede acceder al contenido del iframe (CORS)');
55 }
56 }
57 } catch (e) {
58 console.log('Error al procesar iframe:', e);
59 }
60 }
61
62 // Buscar el contenedor del challenge y hacer click en él
63 const challengeContainer = document.querySelector('[id*="cf-challenge"]') ||
64 document.querySelector('[class*="cf-challenge"]') ||
65 document.querySelector('.main-wrapper');
66
67 if (challengeContainer) {
68 console.log('Contenedor de challenge encontrado');
69 challengeContainer.click();
70 return true;
71 }
72
73 return false;
74 }
75
76 // Función para observar cambios en el DOM
77 function observeCloudflareChallenge() {
78 const observer = new MutationObserver(debounce(() => {
79 console.log('Cambio en el DOM detectado, buscando checkbox de Cloudflare...');
80 clickCloudflareCheckbox();
81 }, 500));
82
83 observer.observe(document.body, {
84 childList: true,
85 subtree: true
86 });
87
88 console.log('Observer de Cloudflare activado');
89 }
90
91 // Función debounce para evitar múltiples ejecuciones
92 function debounce(func, wait) {
93 let timeout;
94 return function executedFunction(...args) {
95 const later = () => {
96 clearTimeout(timeout);
97 func(...args);
98 };
99 clearTimeout(timeout);
100 timeout = setTimeout(later, wait);
101 };
102 }
103
104 // Función de inicialización
105 function init() {
106 console.log('Inicializando auto-click de Cloudflare...');
107
108 // Intentar hacer click inmediatamente
109 setTimeout(() => {
110 clickCloudflareCheckbox();
111 }, 1000);
112
113 // Intentar nuevamente después de 2 segundos
114 setTimeout(() => {
115 clickCloudflareCheckbox();
116 }, 2000);
117
118 // Intentar nuevamente después de 3 segundos
119 setTimeout(() => {
120 clickCloudflareCheckbox();
121 }, 3000);
122
123 // Activar el observer para detectar cuando aparezca el challenge
124 observeCloudflareChallenge();
125 }
126
127 // Esperar a que el DOM esté listo
128 if (document.readyState === 'loading') {
129 document.addEventListener('DOMContentLoaded', init);
130 } else {
131 init();
132 }
133})();