【问题标题】:scrolling down in selenium while more Data loads- Lazy loading在加载更多数据时在 selenium 中向下滚动 - 延迟加载
【发布时间】:2019-02-18 21:40:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: selenium scroll loading lazy-evaluation


    【解决方案1】:

    此处示例如何滚动直到数据元素的大小不变。要获取 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"))));
    

    【讨论】:

    • 这里的数据定位器是我的 Div 标签还是别的什么?因为我的页面上有多个 div 标签。例如。 facebook好友列表有多个div标签
    • @Radhika 用于获取好友列表的任何简短且稳定的标签。
    • 谢谢.. 我的页面包含 10 个 div 标签,所有标签的 xpath 如下://div[@class="save_ride_container"]。在延迟加载时,会加载 10 个以上的 div 元素。你能告诉我如何将它放入我的代码中
    • 这个 div 标签有一个 ID(即每个 div 标签都是唯一的,并且没有顺序),里面有一个乘客姓名 div 标签,如下所示: //*[@id="100452"] /div[1]/div[3]/p[5]/strong
    • 您能进一步指导我吗?
    猜你喜欢
    • 2014-09-01
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2013-11-23
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多