Created
December 23, 2016 00:33
-
-
Save tgirardi/5d62578a3834099c47581265d97be054 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function () { | |
// nombre de la clase del botón para seguir cuentas | |
var NOMBRE_CLASE_BOTON = '_aj7mu'; | |
// nombre clase del elemento que lista cada cuenta | |
var NOMBRE_CLASE_LISTADO = '_539vh'; | |
// nombre clase de cada item de la lista de cuentas | |
var NOMBRE_CLASE_ITEM_LISTADO = '_cx1ua'; | |
// texto de los botones que sirven para seguir cuentas | |
var TEXTO_BOTON = 'Follow'; // en español usar 'Seguir' | |
// cantidad de segundos entre cada click de botón | |
var DELAY = 5; | |
// cantidad máxima de cuentas a las cuales seguir | |
var LIMITE = 100; | |
// nombre de la clase que indica que la cuenta no se debe seguir | |
var NOMBRE_CLASE_SKIP = 'skip-this-one'; | |
// color de fondo para indicar que una cuenta no se debe seguir | |
var COLOR_CLASE_SKIP = 'red'; | |
function findAncestor (el, cls) { | |
while ((el = el.parentElement) && !el.classList.contains(cls)); | |
return el; | |
} | |
var tiempo; | |
var listado; | |
function startFollowing(limite) { | |
var contador = 1; | |
var contadorProgreso = 0; | |
limite = (limite) ? limite : LIMITE; | |
console.log('intentaremos seguir ' + limite + ' cuentas'); | |
Array.prototype.some.call( | |
listado.getElementsByClassName(NOMBRE_CLASE_BOTON), | |
function (el, i) { | |
if(contador <= limite) { | |
tiempo = (contador * DELAY + 2 * Math.random()) * 1000; | |
try { | |
if(el.textContent === TEXTO_BOTON && | |
!findAncestor(el, NOMBRE_CLASE_ITEM_LISTADO).classList.contains(NOMBRE_CLASE_SKIP)) { | |
window.setTimeout(el.click.bind(el), tiempo); | |
console.log('siguiendo item ' + (i + 1)); | |
++contador; | |
} else { | |
console.log('ignorando item ' + (i + 1)); | |
} | |
} catch (e) { | |
++contador; | |
console.log('falla al intentar seguir item ' + (i + 1)); | |
} | |
} else { | |
console.log('limite alcanzado'); | |
console.log('resultado: intentamos seguir ' + contador + ' cuentas'); | |
console.log('tiempo estimado ' + tiempo + 'ms'); | |
console.log('Por favor espere'); | |
var progresoInterval = window.setInterval(function () { | |
var tiempoProgreso = (++contadorProgreso * DELAY * 1000); | |
var porcentaje = tiempoProgreso / tiempo * 100; | |
if(porcentaje >= 100) { | |
console.log('listo'); | |
window.clearInterval(progresoInterval); | |
} else { | |
console.log(tiempoProgreso + 'ms. ' + porcentaje + '%'); | |
} | |
}, DELAY * 1000); | |
return true; | |
} | |
}); | |
} | |
Array.prototype.forEach.call(document.getElementsByClassName(NOMBRE_CLASE_LISTADO), function (el) { | |
if(!listado) { | |
listado = el; | |
} | |
el.addEventListener('click', function (e) { | |
if(e.target.classList.contains(NOMBRE_CLASE_ITEM_LISTADO)) { | |
e.target.classList.toggle(NOMBRE_CLASE_SKIP); | |
} | |
}); | |
Array.prototype.forEach.call( | |
listado.getElementsByClassName(NOMBRE_CLASE_BOTON), | |
function (el, i) { | |
el.parentElement.appendChild(document.createTextNode(i + 1)); | |
}); | |
}); | |
var style = document.createElement('style'); | |
style.type = 'text/css'; | |
style.appendChild( | |
document.createTextNode('.' + NOMBRE_CLASE_SKIP + ' { background-color: ' + COLOR_CLASE_SKIP + '; }') | |
); | |
document.head.appendChild(style); | |
// hacemos disponible la función startFollowing desde afuera | |
window.startFollowing = startFollowing; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment