Seleccionar a Tus Amigos en Facebook de Manera Automática

Aloha, developah! 🙂

Aquí te dejo un bookmarklet que he creado para que cuando quieras seleccionar a tus amigos en Facebook para invitarles a que hagan Me gusta en una página, este script lo haga de manera automática y no tengas que ir haciendo clic uno por uno.

Un bookmarklet es un marcador que, en lugar de apuntar a una dirección URL, hace referencia a una pequeña porción de código JavaScript para ejecutar ciertas tareas automáticamente.

Cómo Añadir el Bookmarklet a Marcadores

Si no has utilizado nunca uno, sólo has de arrastrar el enlace que hay a continuación a la barra de marcadores de tu navegador y se guardará como si hubieses añadido una página a favoritos.

Ahora solo has de hacer clic en el marcador cuando estés en una página de Facebook y quieras seleccionar a tus amigos para invitarles a que le den a Me gusta.

Seleccionar a Tus Amigos en Facebook

Código en el Bookmarklet

Como suele decirse: Show me the code :D. Para poder manipular el DOM, verás que he echado mano a textos que están en español. Es lo malo que tiene React y las clases autogeneradas y lo de no tener atributos id :\ Si necesitas usarlo en otros idiomas deberás cambiarlos antes de poder usarlo. Son los siguientes:

  • Línea 1: Invita a tus amigos a indicar que les gusta
  • Línea 4: No invitados

Por otro lado, el temporizador está puesto a 2 segundos para que haga scroll de manera más pausada, ya que haciendo pruebas, Facebook me acabó bloqueando temporalmente ya que decía que me desplazaba muy rápido 😀

Código Minificado

El código que hay en el bookmarklet es el siguiente, está minificado y es una función autoejecutable con la declaración de javascript: delante:

javascript:( function () {let getRawData=document.querySelector('[aria-label^="Invita a tus amigos a indicar que les gusta"]'),getFriendsList=getRawData.childNodes[2].children[4].childNodes[0].childNodes[0],rowHeight=getFriendsList.firstChild.scrollHeight,getTotalFriends=parseInt(getElementsByTextIncluded("span","No invitados ")[0].innerHTML.split("(")[1]),totalHeight=rowHeight*getTotalFriends;function getElementsByTextIncluded(e,t){let i=document.querySelectorAll(e);return Array.prototype.filter.call(i,e=>RegExp(t).test(e.textContent))}function scrollToBottom(){getFriendsList.scrollIntoView({block:"end",behavior:"smooth"})}function selectAllFriends(){getFriendsList.childNodes.forEach(e=>{e.firstChild.click()})}function getAllFriends(){scrollToBottom(),console.log(getFriendsList.scrollHeight),setTimeout(validateHeight,2e3)}function validateHeight(){getFriendsList.scrollHeight<=totalHeight/2?setTimeout(getAllFriends,2e3):(scrollToBottom(),setTimeout(selectAllFriends,2e3))}validateHeight();})();

Código sin Minificar

let getRawData = document.querySelector('[aria-label^="Invita a tus amigos a indicar que les gusta"]');
let getFriendsList = getRawData.childNodes[2].children[4].childNodes[0].childNodes[0];
let rowHeight = getFriendsList.firstChild.scrollHeight;
let getTotalFriends = parseInt(getElementsByTextIncluded('span', 'No invitados ')[0].innerHTML.split("(")[1]);
let totalHeight = rowHeight * getTotalFriends;

function getElementsByTextIncluded (selector, text) {
  let elements = document.querySelectorAll(selector);
  return Array.prototype.filter.call(elements, (element) => {
    return RegExp(text).test(element.textContent);
  });
};

function scrollToBottom () {
  getFriendsList.scrollIntoView({ block: "end", behavior: "smooth" });
};

function selectAllFriends () {
  getFriendsList.childNodes.forEach(item => {
    item.firstChild.click();
  });
};

function getAllFriends() {
  scrollToBottom();
  console.log(getFriendsList.scrollHeight);
  setTimeout(validateHeight, 2000);  
};

function validateHeight () {
  let actualHeight = getFriendsList.scrollHeight;
  if (actualHeight <= (totalHeight / 2)) {
    setTimeout(getAllFriends, 2000);    
  } else {
    scrollToBottom();
    setTimeout(selectAllFriends, 2000);
  };
};

validateHeight();

Yo lo he estado probando y la verdad que va bastante bien. Ahora, seleccionar a tus amigos en Facebook es mucho más cómodo. 😉

Si lo pruebas, ya me dices qué tal y si tienes algún problema, házmelo saber e intentaré solucionarlo. Si prefieres hacerlo tú, tienes el enlace al repo de GitHub aquí debajo.

Deja un comentario