Python + Selenium: espere hasta que el elemento esté completamente cargado

4 minutos de lectura

Python Selenium espere hasta que el elemento este completamente
CDNel 2do

Así que he estado tratando de jugar con la función en Selenium que se llama:

wait = WebDriverWait(browser, 20).wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button')))
wait.click()

Antes de empezar a decir el tema. De lo que estoy tratando de hacer un Selenium es básicamente hacer un Selenium que escriba automáticamente en el foro en esta imagen:

Foto1

Lo cual no es ninguna complicación. Sin embargo, cada vez que presiono “Skapa Konto”, se carga y espera hasta que aparece una nueva página que es:

Foto2

Cuál es la imagen de arriba. Mi idea es que lo que deseo es que espere hasta que me dé esa “imagen” (que es el mismo enlace para que no haga ningún cambio), así que supongo que es mejor esperar hasta que aparezca un texto, etc. “FORTSÄTT o HOLA” es el navegador. Luego continúa.

Sin embargo, tengo un problema al intentar usar esto. La razón es que no espera hasta que se encuentra, sino que va instantáneamente y hace otras cosas que no debería. En este momento, simplemente se salta la espera como si la función no funcionara o no estuviera allí. ¿Qué hice mal?


Actualizar:

Lo que sé es que cada vez que intento registrarme en el sitio web, el sitio web no cambia, lo que significa que me lleva a una nueva página cuando la cuenta ha sido exitosa. Pero se actualiza automáticamente y dice que ha tenido éxito. Lo que significa que de alguna manera quiero hacer algo de manera que verifique y vea si algo nuevo le sucedió a la página. Si no, ¿Esperar de nuevo y volver a intentarlo?… ¿Algo así?

Lo que haría es, etc. comprobar si hay:

<div class="confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle">NU ÄR DU MEDLEM, Hello.</div>

o

<button type="button" class="nsg-button nsg-bg--black register-next-step-cta js-nextStepCta">FORTSÄTT</button>

Sin embargo, el problema es, como dije, cada vez que presiono “SKAPA KONTO”: solo espera a que el servidor verifique dos veces y luego actualiza automáticamente la página y dice exitoso.

  • ¿Puedes eliminar el .wait después de WebDriverWait e intentarlo? Según la documentación oficial, debería ser element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, “myDynamicElement”)))

    – Satisfacer

    22 de mayo de 2018 a las 13:38

  • @CDNthe2nd Parece que eres víctima de un absoluto quebradizo xpath. Actualice la pregunta con la información pertinente. HTML

    – selenio no detectado

    22 de mayo de 2018 a las 13:43

  • No funcionó @Satish – ¡Actualizaré mi pregunta en unos minutos para ambos!

    – CDNthe2nd

    22 de mayo de 2018 a las 13:51

  • ¡Hecho! @DebanjanB! ¡Espero haberlo hecho correctamente o algo que quisiste decir!

    – CDNthe2nd

    22 de mayo de 2018 a las 14:58

1646749817 162 Python Selenium espere hasta que el elemento este completamente
selenio no detectado

En primer lugar, creo firmemente que estabas bastante cerca. Simplemente necesita formatear su código en un pitónico que puede resolver su problema de inmediato de la siguiente manera:

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button'))).click()

Usted ha quitado la alfombra sobre el problema real al mencionar no espera hasta que lo encuentra, sino que va instantáneamente y hace otras cosas que no debería en lugar de mencionar lo que se supone que debe hacer su programa (por ejemplo, sus pruebas de código) y qué mal está haciendo su programa (es decir, seguimiento de la pila de errores).

según el HTML ha compartido, puede inducir a un camarero para cualquiera de los elementos web como sigue :

  • Camarero para la visibilidad del texto NU ÄR DU MEDLEM, Hola. :

    • CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.confirmation-title.nsg-font-family--platform.nsg-text--black.edf-title-font-size--xlarge.js-confirmationTitle")))
      
    • XPATH:

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class="confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle" and contains(.,'NU ÄR DU MEDLEM, Hello.')]")))
      
  • Camarero para el botón con texto. FORTSÄTT :

    • CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.nsg-button.nsg-bg--black.register-next-step-cta.js-nextStepCta")))
      
    • XPATH:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class="nsg-button nsg-bg--black register-next-step-cta js-nextStepCta" and contains(.,'FORTSÄTT')]")))
      

  • ¡Ahí vamos! ¡Sí, eso realmente ayudó! Ahora hace lo que yo deseaba. ¡Realmente lo aprecio y no puedo agradecerte más que suficiente!

    – CDNthe2nd

    22 mayo 2018 a las 20:23

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad