繁体   English   中英

无限滚动抓取页面

[英]Scrape a page with infinite scroll

我试图在电子商务网站上获取所有产品,该网站使用无限滚动来加载产品,我找到了一个滚动到页面底部的解决方案,但是,它似乎没有端点,并且它甚至在到达页面底部后仍在继续,所以我想知道如何知道页面是否已经结束,以便我可以设置条件并停止清除间隔的功能,非常感谢任何帮助。 我正在粘贴我当前的解决方案,该解决方案向下滚动到页面末尾,但之后从未停止。

(function() {
    var lastScrollHeight = 0, count = 0;
    function autoScroll() {
      count++;
      console.log(count);
      var sh = document.documentElement.scrollHeight;
      if (sh !== lastScrollHeight) {
        console.log(sh, lastScrollHeight);
        lastScrollHeight = sh;
        document.documentElement.scrollTop = sh;
      }
    }
    var myInterval = window.setInterval(autoScroll, 100);
}())

看起来好像您正在检查页面是否确实滚动,但从未取消window.setInterval()

这样的东西应该可以工作:(未测试)

(function() {
    var lastScrollHeight = 0, count = 0, myInterval = null, failCount = 0;
    function autoScroll() {
      count++;
      console.log(count);
      var sh = document.documentElement.scrollHeight;
      if (sh !== lastScrollHeight) {
        console.log(sh, lastScrollHeight);
        lastScrollHeight = sh;
        document.documentElement.scrollTop = sh;
        failCount = 0; // reset the number of failures
      }
      else {
        failCount++; // record that we failed
        if(failCount >= 10) // if we have failed 10 times in a row then exit
          window.clearInterval(myInterval);
      }
    }
    myInterval = window.setInterval(autoScroll, 100);
}())

编辑:更新为允许 10 个循环,在退出间隔之前不发生滚动。

这几乎可以完美满足我的需求。 当选项卡不是焦点选项卡时(AKA继续在后台滚动),是否有办法使它继续工作?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM