首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在selenium中滚动,同时加载更多的数据-延迟加载

问在selenium中滚动,同时加载更多的数据-延迟加载
EN

Stack Overflow用户
提问于 2018-09-14 06:04:29
回答 1查看 7.1K关注 0票数 3

嗨,我已经写了一个代码,用下面的代码向下滚动一个页面:

代码语言:javascript
复制
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

但是,它只滚动一次,而在我的页面上加载更多的数据。数据被封装在div标签中。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-14 06:38:32

这里的例子是如何滚动直到数据元素的大小不改变为止。要获得loadingLocator打开铬devtools,滚动和按F8,它将暂停,您将能够获得选择器。

代码语言:javascript
复制
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();
}

此外,您还可以实现自己的等待,如下所示:

代码语言:javascript
复制
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"))));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52325804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档