javascript 如何从带有无限滚动的页面的DOM中连续抓取数据?

tf7tbtn2  于 2022-12-02  发布在  Java
关注(0)|答案(2)|浏览(130)

有一个网页,我想刮一些信息。
我从收集一堆HTML元素开始。

var theSearch = document.getElementsByClassName('theID');

然后,我将HTML集合转换为数组。

var arr = Array.prototype.slice.call( theSearch );

现在是棘手的部分。
我想向下滚动页面,并抓住页面上出现的新项目。

window.scrollTo(0, document.body.scrollHeight);

如何访问新插入的DOM节点?

var theSearch2 = document.getElementsByClassName('theID');

......并将其放入新的数组中......

var arr2 = Array.prototype.slice.call( theSearch );

......然后将项目从arr2推到arr,就像......

arr.push(...arr2);

如何实现一个持续的过程,不断地进行抓取,直到没有新的项目被追加到页面的DOM中。

h9a6wy2h

h9a6wy2h1#

突变观察者

MutationObserver接口提供了监视对DOM树所做更改的能力。

var observer = new MutationObserver(function (mutations) {
      mutations.forEach(function (mutation) {
        mutation.addedNodes.forEach(function (addedNode) {
          console.log(addedNode, "@@@"); // your new item
        });
      });
    });

    observer.observe(document.getElementById("lists"), {
      childList: true,
      subtree: false
    });

试试这个:

第一次

smdnsysy

smdnsysy2#

OP可以查看MutationObserver。每当新项目被渲染到DOM中时(由滚动触发),观察者的callback接收OP可以对其进行操作的MutationRecord示例的列表。
第一个

相关问题