如何检查滚动时是否到达页面底部

How to check whether Bottom of the page reached when I do scrolling

我必须截取整个页面,但我无法成功截取(只有Firefox驱动支持截取全屏)。所以我想将页面拆分为顶部、中心、底部并将其保存为三个屏幕截图,但问题是,如果我编写以下代码

require 'watir'
b=Watir::Browser.new
b.scroll.to :top
b.screenshot.save("top.png")
b.scroll.to :center
b.screenshot.save("center.png")
b.scroll.to :bottom
b.screenshot.save("bottom.png")

不幸的是,上述代码无论是否需要滚动页面都截取了三个屏幕截图。所以我的问题是,有什么办法可以知道 Page 是否已经到达底部?

您可以获得元素的位置,尝试向下滚动并查看元素位置是否已更改。如果没有,您可能处于“底部”,但是有很多潜在的警告,这种情况将取决于上下文。

您可以获得 window 高度以及正文内容高度,以估计您需要多少个屏幕截图。我说“近似”是因为获取高度的方法有各种注意事项,例如处理滚动条。除非你真的需要像素完美的屏幕截图,否则这个近似值应该足够好了。

# Determine how many screenshots are needed to get all of the content
window_height, content_height = b.execute_script('return [window.innerHeight, document.body.clientHeight];')
screenshot_pieces = content_height / window_height.to_f

# Always take a screenshot of the top
b.scroll.to :top
b.screenshot.save('top.png')

# If there are more than 2 pieces, take a screenshot of the center
if screenshot_pieces > 2 
  b.scroll.to :center
  b.screenshot.save('center.png')
end

# If there are more than 1 piece, take a screenshot of the bottom
if screenshot_pieces > 1
  b.scroll.to :bottom
  b.screenshot.save('bottom.png')
end

您可以根据自己的喜好调整上述条件。例如,如果您不希望您的屏幕截图有重叠部分(即不关心页面的小数部分),您可以将条件分别更改为 screenshot_pieces >= 3screenshot_pieces >= 2