Me gustaría usar la barra de desplazamiento en las ventanas emergentes de la página siguiente. Si hace clic en cualquier producto en la página, se abrirá una ventana emergente donde puede agregar elementos adicionales. Estoy tratando de usar Keys.send_keys(Keys.ARROW_DOWN) para desplazarme hacia abajo en la ventana emergente, pero no puedo encontrar el elemento de la barra de desplazamiento en Chrome. Intenté moverme a elementos usando otros métodos sin éxito, así que me gustaría probar con las teclas de flecha.
https://www.just-eat.co.uk/restaurants-mcdonalds-victorialondon/menu
Me las arreglé para usar las teclas de flecha en las ventanas emergentes en FireFox pero no puedo replicar en Chrome.
Puede intentar encontrar un elemento dentro de la ventana emergente y luego usar ese elemento para desplazarse. El truco aquí es asegurarse de que el elemento sea enfocable para que pueda usarlo para desplazarse con las teclas de flecha. Los elementos enfocables son los que pueden recibir eventos de teclado , los elementos que tienen una función de enfoque declarada en su interior. Dado que la documentación de w3c http://www.w3.org/TR/DOM-Level-2-HTML/html.html no se actualiza desde hace mucho tiempo, no tenemos una lista de elementos enfocables, pero algunos de los los elementos enfocables según él son HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement, HTMLIFrameElement, HTMLButtonElement, HTMLAnchorElement y cualquier elemento con un tabindex.
A continuación se muestra un fragmento de código de muestra para su referencia.
from selenium.webdriver.common.keys import Keys focusable_element_in_popup = driver.find_element_by_id('id_of_the_element') focusable_element_in_popup.send_keys(Keys.ARROW_DOWN) #or you can use //a magic using xpath to return you the any first link on popup, like below #driver.find_element_by_xpath('//div[@class="some-class"]//a')o también puede usar move_to_element o scrollIntoView como se muestra a continuación. Si esto no funciona como se esperaba, intente agregar actions.click() después de move_to_element para enfocarlo.
from selenium.webdriver.common.action_chains import ActionChains element = driver.find_element_by_id("my-id") actions = ActionChains(driver) actions.move_to_element(element).perform() #actions.move_to_element(element) #actions.click() #actions.send_keys("SOME DATA") #actions.perform() #or driver.execute_script("arguments[0].scrollIntoView();", element)Es posible que se requiera algo de prueba y error al principio para hacerlo bien para su caso de uso.
Me gusta usar JavaScript para desplazarme hacia abajo cuando uso Selenium. Es mucho más confiable desde mi experiencia.
Prueba lo siguiente:
X = 500 DRIVER_NAME.execute_script("window.scrollBy(0, X)")Otra opción es evitar la necesidad de desplazarse en primer lugar inyectando CSS en la página web. Puede escribir varias líneas de código CSS que harían que la fuente de la ventana emergente y la altura de la línea fueran muy pequeñas; de esta manera, podrá encajar todo en la pantalla sin desplazarse.
Así es como se vería:
new_css = "body{background-color: white;}" DRIVER_NAME.executeScript("$('<style type=\"text/css\">new_css</style>').appendTo('html > head');");Una de las dos soluciones anteriores debería resolver su problema.
No estoy seguro de qué ha intentado ya y qué está fallando, pero dado que mencionó la presencia de una ventana emergente, debe asegurarse de que está operando en la ventana correcta (es decir, emergente).
Consulte aquí para obtener más detalles: enfocar una ventana diferente
Una vez que haya verificado que está operando en la ventana correcta, las respuestas anteriores deberían funcionar. También puede encontrar este enlace útil para desplazarse por una página web
Por último, pero no menos importante, siempre es recomendable compartir un ejemplo reproducible de su código para ayudar a otros a ayudarlo;) La mejor de las suertes.