Skip to content

Instantly share code, notes, and snippets.

@tgirardi
Created December 23, 2016 00:33
Show Gist options
  • Save tgirardi/5d62578a3834099c47581265d97be054 to your computer and use it in GitHub Desktop.
Save tgirardi/5d62578a3834099c47581265d97be054 to your computer and use it in GitHub Desktop.
(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