gpt4 book ai didi

selenium - 在更多数据加载时在 Selenium 中向下滚动 - 延迟加载

转载 作者:行者123 更新时间:2023-12-02 19:43:29 26 4
gpt4 key购买 nike

您好,我已经编写了一个使用以下代码向下滚动页面的代码:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

但是,它只滚动一次,而更多数据会加载到我的页面上。数据包含在 div 标签内。

当向下滚动时,页面显示正在加载并加载更多数据(延迟加载)。我如何在其中实现延迟加载的滚动?

最佳答案

这里是如何滚动直到数据元素的大小不变的示例。要获取loadingLocator,请打开chrome 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"))));

关于selenium - 在更多数据加载时在 Selenium 中向下滚动 - 延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52325804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com