es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Selenium find_elements solo funciona si transcurre tiempo desde get().

Al ejecutar estas 2 líneas juntas en Colab, devuelve []:

python
wd.get("https://wetransfer.com/")
wd.find_elements(By.CSS_SELECTOR, 'input[type=file]')

Sin embargo, al ejecutar una línea después de la otra, se obtiene el resultado esperado:

python
[<selenium.webdriver.remote.webelement.webelement (session="3cdfb3afbb591862e909cd406b6ac523" ,="" element="19fd31e8-710a-4b6e-8284-9a7409f12718" )="">,
<selenium.webdriver.remote.webelement.webelement (session="3cdfb3afbb591862e909cd406b6ac523" ,="" element="837097d1-5735-4b24-9cb2-9d3ded3a0311" )="">]
</selenium.webdriver.remote.webelement.webelement></selenium.webdriver.remote.webelement.webelement>

El comando get se supone que es bloqueante, así que no estoy seguro de qué está pasando aquí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí podría estar relacionado con el tiempo. El método get se utiliza para navegar a una página web, pero no espera a que la página se cargue completamente antes de retornar. Por lo tanto, si la página web tarda más tiempo en cargarse, es posible que la próxima línea de código comience a ejecutarse antes de que la página se haya cargado por completo, lo que podría causar que el método find_elements falle.

    Para solucionar este problema, podemos utilizar WebDriverWait y expected_conditions para esperar a que la página se cargue completamente antes de buscar elementos. Aquí tienes un ejemplo de cómo modificar el código:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wd.get("https://wetransfer.com/")
    
    # esperar a que el elemento de entrada sea visible
    elemento = WebDriverWait(wd, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "input[type=file]"))
    )
    
    # buscar elementos de entrada después de que la página se haya cargado completamente
    elementos = wd.find_elements(By.CSS_SELECTOR, "input[type=file]")
    
    print(elementos)
    

    En este código modificado, primero utilizamos WebDriverWait para esperar a que el elemento de entrada sea visible antes de continuar con la siguiente línea de código. Esto asegura que la página se haya cargado completamente antes de buscar elementos. Luego, utilizamos find_elements para buscar elementos de entrada, como antes. Finalmente, imprimimos la lista de elementos para verificar que hemos encontrado los elementos deseados correctamente.

Comments are closed.