嗨,我已经写了一个代码,用下面的代码向下滚动一个页面:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");但是,它只滚动一次,而在我的页面上加载更多的数据。数据被封装在div标签中。
当它向下滚动时,页面显示加载并加载更多数据(延迟加载)。如何在其中实现延迟加载的滚动?
发布于 2018-09-14 06:38:32
这里的例子是如何滚动直到数据元素的大小不改变为止。要获得loadingLocator打开铬devtools,滚动和按F8,它将暂停,您将能够获得选择器。
WebDriverWait wait = new WebDriverWait(driver, 5);
JavascriptExecutor js = (JavascriptExecutor) driver;
int dataSize = driver.findElements(dataLocator).size();
while (true){
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
wait.ignoring(NoSuchElementException.class)
.until(ExpectedConditions.invisibilityOfElementLocated(loadingLocator));
if (driver.findElements(dataLocator).size()== dataSize)
break;
dataSize = driver.findElements(dataLocator).size();
}此外,您还可以实现自己的等待,如下所示:
By dataLocator = By.cssSelector(".save_ride_container");
WebDriverWait wait = new WebDriverWait(driver, 5, 500);
JavascriptExecutor js = (JavascriptExecutor) driver;
AtomicInteger dataSize = new AtomicInteger(driver.findElements(dataLocator).size());
boolean complete = false;
while (!complete){
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
complete = wait.ignoring(TimeoutException.class)
.until(d -> {
int size = driver.findElements(dataLocator).size();
if (size== dataSize.get())
return true;
dataSize.set(size);
return false;
});
}
List<WebElement> passengers = driver.findElements(dataLocator);
passengers.forEach(p -> System.out.println(p.findElement(By.xpath("./div[1]/div[3]/p[5]/strong"))));https://stackoverflow.com/questions/52325804
复制相似问题