Estoy tratando de escribir un código javascript que haga clic en todos los botones en un hilo de discusión en https://www.teamblind.com/ , para poder ver todos los comentarios sin hacer clic en los botones para expandirlos.
Descubrí que puedo hacer clic en todos los botones haciendo lo siguiente
var bs = document.getElementsByClassName('btn_more'); bs[0].click();en la consola, solo tengo que ejecutar repetidamente bs[0].click(); hasta que quede un elemento, pero cuando lo convertí en un ciclo while como el siguiente
function clickall() { var bs = document.getElementsByClassName('btn_more'); while (bs.length > 1 ) { // 1 because the last button directs to other page, all other buttons expands the contents in the current thread bs[0].click(); } return; }la pestaña del navegador en realidad dejaba de funcionar cuando ejecuto esta función en la consola web, tuve que usar el administrador de tareas para cerrar un proceso del navegador para detener la ejecución de esta función en la consola.
Una de mis conjeturas es que la página se carga dinámicamente, y tal vez deba esperar a que la página se expanda. ¿Alguien sabe por qué la pestaña puede bloquearse al ejecutar dicha función y cómo se debe solucionar?
EDITAR: al hacer clic en un botón, se reduce el tamaño de bs 
Registrando el tamaño bs
es posible que el btn en sí no se elimine después del clic, es posible que se haya vuelto invisible. Y aparte de eso, los botones ya se recopilaron antes del ciclo, por lo que si se eliminan, esta podría ser la razón por la que se está causando el error, se está aplicando una función a un nodo que no se puede encontrar. Entonces, en su lugar, use un bucle for...each o elementos de consulta cada vez dentro del bucle while.
Así que primero no se necesita el ciclo while. Hagámoslo con if :
function clickall() { var bs = document.getElementsByClassName('btn_more'); // 1 because the last button directs to other page, // all other buttons expands the contents in the current thread if ( bs.length > 1 ) { bs[0].click(); } }Así que solo hacemos clic en este botón una vez. Ahora podemos ejecutar ese código regularmente:
// You can stop the loop with window.clearInterval(intervalHandle); when you want. let intervalHandle = window.setInterval(clickall, 500);Otras lecturas: