java - con - selenium scroll down python
Página desplazarse hacia arriba o hacia abajo en Selenium WebDriver(Selenium 2) usando Java (11)
He escrito el siguiente código en Selenium 1 (también conocido como Selenium RC) para desplazar páginas usando java:
selenium.getEval("scrollBy(0, 250)");
¿Cuál es el código equivalente en Selenium 2 (WebDriver)?
Debe agregar un desplazamiento a la página para seleccionar todos los elementos usando Selenium.executeScript("window.scrollBy(0,450)", "")
.
Si tiene una lista grande, agregue el desplazamiento varias veces a través de la ejecución. Tenga en cuenta que el desplazamiento solo va a un cierto punto en la página, por ejemplo (0,450).
El ejecutor de Javascript siempre hace el trabajo a la perfección:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
donde (0,300)
son las distancias horizontal y vertical respectivamente. Coloque sus distancias según sus requisitos.
Si eres perfeccionista y te gusta obtener la distancia exacta a la que deseas desplazarte en el primer intento, utiliza esta herramienta, MeasureIt . Es un complemento brillante de Firefox.
Gracias por la respuesta de Ripon Al Wasim. Hice algunas mejoras. debido a problemas de red, vuelvo a intentar tres veces hasta romper el ciclo.
driver.get(url)
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
try_times = 0
while True:
# Scroll down to bottom
driver.execute_script("window.scrollBy(0,2000)")
# Wait to load page
time.sleep(scroll_delay)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if last_height == new_height:
try_times += 1
if try_times > 3:
try_times = 0
break
last_height = new_height
Hay muchas maneras de desplazarse hacia arriba y hacia abajo en Selenium Webdriver. Siempre uso Java Script para hacer lo mismo.
A continuación está el código que siempre me funciona si quiero desplazarme hacia arriba o hacia abajo
// This will scroll page 400 pixel vertical
((JavascriptExecutor)driver).executeScript("scroll(0,400)");
Puede obtener el código completo desde aquí Página de desplazamiento en Selenio
Si desea desplazarse por un elemento, debajo de la pieza de código funcionará para usted.
je.executeScript("arguments[0].scrollIntoView(true);",element);
Obtendrá el documento completo aquí Desplazarse por un elemento específico
No quería usar JavaScript ni ninguna biblioteca externa, así que esta era mi solución (C #):
IWebElement body = Driver.FindElement(By.TagName("body"));
IAction scrollDown = new Actions(Driver)
.MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar
.ClickAndHold()
.MoveByOffset(0, 50) // scroll down
.Release()
.Build();
scrollDown.Perform();
También puede hacer fácilmente que este sea un método de extensión para desplazarse hacia arriba o hacia abajo en cualquier elemento.
Para desplazarse hacia abajo :
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");
O bien, puedes hacer lo siguiente:
jse.executeScript("scroll(0, 250);");
Para desplazarse hacia arriba :
jse.executeScript("window.scrollBy(0,-250)", "");
OR,
jse.executeScript("scroll(0, -250);");
Prueba esto
Actions dragger = new Actions(driver);
WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id=''jobreslist_outercontainer'']/div/div[2]/div"));
// drag downwards
int numberOfPixelsToDragTheScrollbarDown = 50;
for (int i=10;i<500;i=i+numberOfPixelsToDragTheScrollbarDown){
try{
// this causes a gradual drag of the scroll bar, 10 units at a time
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
Thread.sleep(1000L);
}catch(Exception e1){}
}
// now drag opposite way (downwards)
numberOfPixelsToDragTheScrollbarDown = -50;
for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
// this causes a gradual drag of the scroll bar, -10 units at a time
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
Thread.sleep(1000L);
}
Puede que esta no sea una respuesta exacta a su pregunta (en términos de WebDriver), pero descubrí que la biblioteca java.awt
es más estable que el selenium.Keys
. selenium.Keys
. Por lo tanto, una acción de bajada de página usando el primero será:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
Desplazarse al pie de la página:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
JavascriptExecutor js = ((JavascriptExecutor) driver);
Desplácese hacia abajo:
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
Desplazarse hacia arriba:
js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Este código funciona para mí. Como la página que estoy probando, carga a medida que nos desplazamos hacia abajo.