Soy bastante nuevo en la creación de scripts con tampermonkey e incluso después de mirar varias respuestas durante las últimas horas, todavía no puedo descifrar esta.
Estoy tratando de hacer una secuencia de comandos que busque un botón y, cuando aparezca, haga clic en él después de unos 2 segundos.
Estoy tratando de buscarlo por ID de esta manera:
var caseHide = document.getElementById("accept"); var checkTimer = setInterval(MyTimer, 1500); function MyTimer() { if (caseHide.offsetParent === null) { return; } var eek = document.getElementById("accept"); var evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); eek.dispatchEvent(evt); } checkTimer();Sin embargo, cuando aparece el botón, no se hace clic.
También debo mencionar que este es un botón que aparece sin un intervalo establecido porque lo solicita una alerta y, como tal, no puedo decir con qué frecuencia aparecerá.
Algunos pensamientos.
El primer getElementById probablemente fallará ya que es probable que ese botón aún no exista.
Además, la simple búsqueda de #accept podría no ser suficiente para localizar el elemento. Depende de cómo se vea tu página.
Esto es lo que hago. En la consola de DevTools, haga esto:
document.getElementById('accept').lengthSi vuelve indefinido, entonces su selector css no es lo suficientemente específico. Puede que tengas que caminar un poco más por el árbol ... algo como:
document.querySelector('body #main .prevDiv #accept')¿Sabes lo que quiero decir? Comenzando más arriba en el árbol y caminando hacia el elemento. Si no funciona en DevTools, no funcionará en TamperMonkey. En bibliotecas modernas como Angular/React/Svelte/etc, es posible que tenga más de un elemento con el mismo ID... por lo que es posible que no lo encuentre simplemente especificando el elemento único.
Entonces, su función puede verse así:
var checkTimer = setInterval(MyTimer, 1500); checkTimer(); function MyTimer() { const eek = document.getElementById("accept"); if (eek !== undefined){ const evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, true); eek.dispatchEvent(evt); } }Referencias: