我正在使用Selenium和c#。
Selenium通常可以自动向下滚动到网页底部以查找元素,但我遇到某个页面可能会增加的问题。
任何人都可以建议一旦大小增加就会向下滚动到页面底部的代码吗?
答案 0 :(得分:11)
尝试使用this question
中所述的javascriptIJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);");
答案 1 :(得分:3)
我知道这是一个旧的,但它可能是某人的帮助。我出来了以下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);
}
答案 2 :(得分:1)
使用.Net 4.5和Selenium WebDriver 2.45
的C#示例只需将_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,here
var timeId = setInterval(function () {
if (window.scrollY !== document.body.scrollHeight)
window.scrollTo(0, document.body.scrollHeight);
else
clearInterval(timeId);
}, 500);
以上500是它将尝试滚动的间隔(以微秒为单位),根据需要进行调整。 [1000微秒= 1秒]
答案 3 :(得分:0)
很抱歉我不使用c#,但猜测任何语言的逻辑都是一样的。如果它是页面的延迟加载,那么您可以使用Actions类来执行发送pagedown键选项。如果您收到更多要加载的项目或没有更多项目的消息,那么您可以识别此元素。将页面向下选项放在while循环中,执行向下翻页直到满足条件。这样您就可以完全加载页面的所有内容。如果您需要更多帮助,请告诉我。