硒:在动态加载网页中滚动到页面末尾

2022-09-02 05:09:35

我有一个网页,在向下滚动页面时不断加载新项目,直到加载每个项目。

我正在Java中使用Selenium,需要向下滚动到页面底部才能加载所有内容。

我尝试了几种不同的选项,例如滚动到页面底部的元素:

WebElement copyrightAtEndOfPage = webDriver.findElement(By.xpath("//a[@href='/utils/copyright.html']"));
((JavascriptExecutor) webDriver).executeScript("arguments[0].scrollIntoView();", copyrightAtEndOfPage);

这只会向下滚动一次,然后网页继续加载。

我也尝试了这种方法,它也只向下滚动一次,因为它只考虑了浏览器的高度。

任何帮助都非常感谢。


答案 1

我将为此提供Python代码。我认为翻译成Java很容易:

def scroll_down(self):
    """A method for scrolling the page."""

    # Get scroll height.
    last_height = self.driver.execute_script("return document.body.scrollHeight")

    while True:

        # Scroll down to the bottom.
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

        # Wait to load the page.
        time.sleep(2)

        # Calculate new scroll height and compare with last scroll height.
        new_height = self.driver.execute_script("return document.body.scrollHeight")

        if new_height == last_height:

            break

        last_height = new_height

希望它能帮助你!


答案 2

感谢Ratmir Asanov(参见上面批准的答案),我将Python代码翻译成Java,以便其他人更容易实现。

try {
    long lastHeight = (long) ((JavascriptExecutor) webDriver).executeScript("return document.body.scrollHeight");

    while (true) {
        ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0, document.body.scrollHeight);");
        Thread.sleep(2000);

        long newHeight = (long) ((JavascriptExecutor) webDriver).executeScript("return document.body.scrollHeight");
        if (newHeight == lastHeight) {
            break;
        }
        lastHeight = newHeight;
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}