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.

Interactuando con la barra de desplazamiento emergente

Estoy tratando de desplazarme hacia abajo en la ventana emergente aquí: (ten en cuenta que tendrás que hacer clic en cualquier alimento en la página para abrir la ventana emergente en cuestión)

https://www.just-eat.co.uk/restaurants-mcdonalds-claphamjunction/menu

He intentado desplazarme hacia abajo en esta ventana emergente utilizando el siguiente código, primero identificando la barra de desplazamiento de la ventana emergente utilizando su selector CSS y luego enviando las teclas de flecha hacia abajo.

popup = browser.find_element_by_css_selector("body > div:nth-child(3) > div:nth-child(4) > div.c-megaModal.MegaModal_c-megaModal_3w2Fg.u-overlay.c-itemSelector.c-modal--popUp--belowMid.is-fullHeight")
popup.send_keys(Keys.ARROW_DOWN)

Sin embargo, obtengo el siguiente mensaje de error:

selenium.common.exceptions.ElementNotInteractableException: Mensaje: elemento no es interactuable

Logré desplazarme hacia abajo sin problemas con FireFox, pero no puedo hacer que funcione en Chrome (necesito usar Chrome por otras razones).

Cualquier ayuda será apreciada.

EDIT:

He intentado lo siguiente, pero no se desplaza (no aparece ningún mensaje de error, simplemente pasa por el código sin desplazarse).

wait = WebDriverWait(browser, 20)
for _ in range(8):
    wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class,'MegaModal_c-megaModal-document--scrollable')]")))
    browser.execute_script("document.querySelector('div[class*=MegaModal_c-megaModal-document--scrollable]').scrollDown += 250")
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la barra de desplazamiento emergente no es interactiva con el método send_keys(). Una solución potencial es utilizar el método execute_script() para ejecutar un comando JavaScript que haga desplazar hacia abajo la ventana emergente. Aquí tienes un ejemplo:

    popup = browser.find_element_by_css_selector("body > div:nth-child(3) > div:nth-child(4) > div.c-megaModal.MegaModal_c-megaModal_3w2Fg.u-overlay.c-itemSelector.c-modal--popUp--belowMid.is-fullHeight")
    browser.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", popup)
    

    Este script encontrará el elemento de la ventana emergente utilizando el mismo selector CSS que antes, y luego utilizará la propiedad scrollTop para desplazar la ventana emergente a su altura máxima. Puedes ajustar el valor pasado a scrollDown según sea necesario para hacer un desplazamiento específico.

    Alternativamente, podrías intentar utilizar la clase ActionChains para simular el desplazamiento con el ratón. Aquí tienes un ejemplo:

    from selenium.webdriver.common.action_chains import ActionChains
    
    popup = browser.find_element_by_css_selector("body > div:nth-child(3) > div:nth-child(4) > div.c-megaModal.MegaModal_c-megaModal_3w2Fg.u-overlay.c-itemSelector.c-modal--popUp--belowMid.is-fullHeight")
    action = ActionChains(browser)
    action.move_to_element(popup).click_and_hold().move_by_offset(0, 200).release().perform()
    

    Este script moverá el ratón al elemento de la ventana emergente, hará clic y mantendrá presionado, luego moverá el ratón hacia abajo 200 píxeles antes de soltarlo. Puedes ajustar el parámetro move_by_offset() según sea necesario para hacer un desplazamiento específico.

Comments are closed.