Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

175
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!