【发布时间】:2013-07-12 14:42:11
【问题描述】:
我正在使用 Selenium Webdriver 来获取网页的内容。当用户使用 AJAX 向下滚动时,页面会加载更多内容。我可以使用 javascript 向下滚动,但不知道何时停止滚动。我怎么知道什么时候不能再向下滚动?我不能使用 document.clientheight 或任何高度属性,因为当窗口太小但元素都附加到 DOM 时它们处理滚动,因此它们的高度是已知的。在这里,元素是动态附加到 DOM 的,所以高度是事先不知道的。
我怎么知道我什么时候到达了谷底?某处是否有“滚动条不可滚动”条件?或者,如果正在加载更多内容并且滚动条还不能滚动,但很快就会触发,这也会触发吗?
谢谢, bsg
更新
对我有用的答案实际上是针对我的另一个问题(这个问题是那个问题的一个更精确的子集)。即,使用 jquery 测试以下等价性: $(document).height() == ($(window).height() + $(window).scrollTop();。如果它的计算结果为 true,则您已经达到页面底部。(有关此工作原理的解释,请参阅Meaning of $(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);
希望这对某人有所帮助。
【问题讨论】:
-
一旦它到达底部,你下一步做什么?如果这是可行的,则停止滚动。这个逻辑适合你吗?
-
希望如此。我正在滚动以获取页面上的所有项目,当我到达底部时,我想对检索到的项目进行一些处理。由于它们没有唯一的 ID 或名称,我迫不及待地想知道我是否已经到达底部。
-
检查
readyState=complete怎么样? -
我正在尝试编写代码来尝试您的建议,但不幸的是,我对 JS 并不是很熟悉。您能否准确指定 readyState 是哪个对象的属性?从搜索来看,似乎不止一个。我会将其放入 WebDriver 等待中吗?我如何让它等待执行 JS(如果是这样的话)?
标签: javascript ajax selenium scroll webdriver