Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
No se puede obtener el elemento DOM que se carga dinámicamente

Tengo algo de experiencia en JavaScript de nivel de entrada, y he estado tratando de obtener un script para iniciar sesión y hacer clic en algunos botones en un sitio web, pero he llegado a un obstáculo difícil donde no puedo encontrar un elemento usando document.getElementByID() o document.contains() y elimínelo usando .remove() .

Con cada uno, la consola devuelve el elemento como "nulo". setTimeout , que se retrasa correctamente, pero los nodos DOM que me interesa eliminar solo aparecen después de presentar la vista web.

Vea mi código a continuación (el código que es específico del sitio web se eliminó por confidencialidad):

 var wv = new WebView(); await wv.loadURL("loginwebsite.com"); await wv.evaluateJavaScript(` var emailTextBox = document.getElementById("username"); emailTextBox.value = "xxxxxx" var pwTextBox = document.getElementById("password"); pwTextBox.value = "yyyyyy"; var submitBtn = document.querySelector("body > form > div.ping-buttons > a"); submitBtn.click();`); await wv.waitForLoad(); await wv.loadURL("SecondWebsite.com"); await wv.waitForLoad(); await wv.evaluateJavaScript(`function removeDivs () { var divOne = document.getElementById('mydialog'); var divTwo = document.getElementById('mydialog-cover'); divOne.remove(); divTwo.remove(); } setTimeout(removeDivs, 5000);`); await wv.present(fullscreen=false);

También probé una técnica diferente para esperar a que aparecieran los elementos antes de intentar eliminarlos, como se muestra a continuación:

 await wv.evaluateJavaScript(`function removeDivs () { var divOne = document.getElementById('mydialog'); var divTwo = document.getElementById('mydialog-cover'); if (document.body.contains(divOne)) { divOne.remove(); } else { setTimeout(removeDivs, 300); } if (document.body.contains(divOne)) { divTwo.remove(); } else { setTimeout(removeDivs, 300); } } removeDivs();`);

Ninguno de los dos funciona como se esperaba. Cuando se presenta la vista web, incluso después de un tiempo de espera de 5 segundos, el JavaScript de la página web original ENTONCES se ejecuta en la página y se crean los divs que estoy buscando.

¿Quizás hay una manera en que puedo presentar la vista web, dejar que los elementos se completen dinámicamente y luego evaluar mi JavaScript para eliminar los divs? O tal vez hay algo simple que me estoy perdiendo.

En cualquier caso, gracias a todos de antemano. Llevo días atascado en este tema. Y tengan paciencia conmigo, todavía estoy aprendiendo sobre scriptable.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Corríjame si me equivoco, pero parece que está tratando de eliminar una especie de ventana emergente modal. Es posible que esto no funcione, pero ¿ha intentado inyectar una etiqueta de estilo CSS para ocultar los elementos en lugar de eliminarlos con JavaScript? De esta manera, el estilo debe aplicarse siempre que se carguen los elementos. Establecer la propiedad "display" en "ninguno" debería eliminar el elemento. La propiedad "!important" debería ayudar a anular el estilo actual, pero puede que no sea necesaria.

No tengo un dispositivo iOS ni el sitio web en cuestión para jugar con ideas, así que esto es un tiro en la oscuridad. Iba a comentar en lugar de publicar una respuesta, pero mi representante es demasiado bajo.

Si no lo ha probado y desea darle una oportunidad, debería poder agregar lo siguiente para evaluar JavaScript().

 var style = "#mydialog, #mydialog-cover{ display: none !important; }"; var styleEl = document.createElement("style"); styleEl.innerText = style; document.head.appendChild(styleEl);

De cualquier manera, ¡buena suerte y salud!

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda