硒-向下滚动一个不断增长的页面

本文关键字:一个 不断增长 滚动 | 更新日期: 2023-09-27 18:29:57

我将Selenium与c#一起使用。

Selenium通常可以自动向下滚动到网页底部来查找元素,但我对某个可能会增加大小的页面有问题。

有人能建议一旦页面变大,就会向下滚动到页面底部的代码吗?

硒-向下滚动一个不断增长的页面

尝试使用本问题中描述的javascript

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);");

我知道这是一个旧的,但它可能有人帮忙。我拿出了以下C#代码:

    private void ScrollToBottom(IWebDriver driver)
    {
        long scrollHeight = 0;
        do
        {
            IJavaScriptExecutor js = (IJavaScriptExecutor) driver;
            var newScrollHeight = (long) js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight); return document.body.scrollHeight;");
            if(newScrollHeight == scrollHeight)
            {
                break;
            }
            else
            {
                scrollHeight = newScrollHeight;
                Thread.Sleep(400);
            }
        } while (true);
    }

C#中使用.Net 4.5和Selenium WebDriver 2.45 的示例

只需更改_url变量以指向您的网站并运行即可。

我使用了ChromeDriver,但它应该也能与其他驱动程序配合使用。

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumScrollTest {
    internal static class Program {
        // Declare Selenium Web Driver
        private static IWebDriver _chromeDriver;
        private static String _url;
        private static void Main(string[] args) {
            // Instantiate URL
            _url = @"http://my.website.com/LazyLoadContent";
            // Instantiate Web Driver as ChromeDriver and set initial URL
            _chromeDriver = new ChromeDriver {Url = _url};
            // Instruct the WebDriver to wait X seconds for elements to load
            _chromeDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15));
            // Instantiate JavaScript Executor using the web driver
            var jse = (IJavaScriptExecutor) _chromeDriver;
            // The minified JavaScript to execute
            const string script =
                "var timeId=setInterval(function(){window.scrollY<document.body.scrollHeight-window.screen.availHeight?window.scrollTo(0,document.body.scrollHeight):(clearInterval(timeId),window.scrollTo(0,0))},500);";
            // Start Scrolling
            jse.ExecuteScript(script);
            // Wait for user input
            Console.ReadKey();
            // Close the browser instance
            _chromeDriver.Close();
            // Close the ChromeDriver Server
            _chromeDriver.Quit();
        }
    }
}

如果您已经对Selenium和C#有了一定的了解,那么最重要的是JavaScript。-来源于Cybermaxs,此处为

    var timeId = setInterval(function () {
        if (window.scrollY !== document.body.scrollHeight)
            window.scrollTo(0, document.body.scrollHeight);
        else
            clearInterval(timeId);
    }, 500);

上面的500是它尝试滚动的间隔(以微秒为单位),根据需要进行调整。[1000微秒=1秒]

很抱歉我不使用c#,但我想任何语言的逻辑都会保持不变。如果是页面的延迟加载,则可以使用Actions类来执行发送pagedown键选项。如果您收到类似消息的更多项目要加载或没有更多项目,则可以识别此元素。将向下翻页选项放入while循环中,while循环执行向下翻页直到满足条件。通过这种方式,您可以完全加载页面的所有内容。如果你需要更多帮助,请告诉我。