我正在使用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);
希望这有助于某人。
答案 0 :(得分:0)
我遇到了同样的问题。我刚刚执行了
$('.footer').scrollIntoView()
js滚动到底部。
答案 1 :(得分: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";
}