He revisado numerosas publicaciones y parece que no puedo encontrar la respuesta a mi problema.
Tengo una expresión console.log en mi intervalo. Cuando el código se ejecuta en la consola, se ejecuta sin problemas, pero se niega a consolar. Registrar mi cadena notificando al usuario del lado del cliente que el script está funcionando.
Aquí está mi código con notas:
let likes = 0; setInterval(() => { const likeButton = document.querySelector('svg[aria-label="Like"]'); const nextButton = document.querySelector('svg[aria-label="Next"]'); if (likeButton) { likeButton.parentNode.parentElement.click() likes++; console.log(`You've liked ${likes} post(s)`); } nextButton.parentElement.parentNode.click(); }, 20000);Desde la inspect source de algunas publicaciones que he visto en Instagram, parece que hay dos estados en el botón Me gusta.
<svg aria-label="Like" /> cuando la publicación aún no tiene Me gusta.<svg aria-label="Unlike" /> cuando ya te gustó la publicación. El problema es que const likeButton = document.querySelector('svg[aria-label="Like"]'); está devolviendo el elemento completo como un objeto, y no es un valor verdadero/falso, por lo que if (likeButton) { nunca será verdadero, pero como señaló @Unmitigated, puede ser "verdadero". Para determinar si se ha hecho clic en el botón y para eliminar cualquier "margen de maniobra real", debe observar el atributo en el elemento likeButton . Puede usar getAttribute() para esto.
let likes = 0; setInterval(() => { const likeButton = document.querySelector('svg[aria-label="Like"]'); const nextButton = document.querySelector('svg[aria-label="Next"]'); if (likeButton.getAttribute("aria-label") === "Like")) { likeButton.parentNode.parentElement.click(); likes++; console.log(`You've liked ${likes} post(s)`); } nextButton.parentElement.parentNode.click(); }, 20000);