0

我正在使用 Selenium Webdriver 来获取网页的内容。当用户使用 AJAX 向下滚动时,页面会加载更多内容。我可以使用 javascript 向下滚动,但不知道何时停止滚动。我怎么知道什么时候不能再向下滚动?我不能使用 document.clientheight 或任何高度属性,因为当窗口太小但元素都附加到 DOM 时它们处理滚动,因此它们的高度是已知的。在这里,元素被动态地附加到 DOM,所以高度是事先不知道的。

我怎么知道我什么时候到达了谷底?某处是否有“滚动条不可滚动”条件?或者,如果正在加载更多内容并且滚动条还不能滚动,但很快就会触发?

谢谢,bsg

更新

对我有用的答案实际上是针对我的另一个问题(这个问题是那个问题的一个更精确的子集)。即,使用 jquery 测试以下等价性: $(document).height() == ($(window).height() + $(window).scrollTop();。如果它的计算结果为 true,则您已经达到页面底部。(有关此工作原理的解释,请参阅$(window).scrollTop() == $(document).height() - $(window).height() 的含义)我不是确定这是否可以在没有 jquery 的情况下工作,所以如果您正在测试的页面没有 jquery,您可能应该使用下面的 user1177636 的答案。

我使用的确切代码是:

JavascriptExecutor js = (JavascriptExecutor)driver;
do{

  //scroll down and do whatever processing you need

  reachedbottom = Boolean.parseBoolean(js.executeScript("return $(document).height() == ($(window).height() + $(window).scrollTop());").toString());

  }while(!reachedbottom);

希望这可以帮助某人。

4

2 回答 2

0

由于 OP 希望我在这里做出回应,我会尝试写下一些东西,但可能不是这个问题的正确答案。

首先,我需要知道您的网站是否是无限滚动的,例如Flickr Explore

如果它是无止境的,那么我怀疑有什么可以确定它什么时候结束。您只能检查是否存在一个特定元素(这不是您的情况,对吗?)。

但是,如果您的站点将在某个时候结束,您可以继续滚动,如果readyState!=complete

由于您没有说明您使用的是什么语言,我将在 C# 中进行说明。

bool readyStateComplete = false;
while (!readyStateComplete) {
    IJavaScriptExecutor executor = driver as IJavaScriptExecutor;
    executor.ExecuteScript("window.scrollTo(0, document.body.offsetHeight)");
    readyStateComplete = (string)executor.ExecuteScript("return document.readyState") == "complete";
}
于 2013-07-15T02:51:25.577 回答
0

我有同样的问题。我刚刚执行了 $('.footer').scrollIntoView() js 滚动到底部。

于 2013-07-14T22:52:32.507 回答