如何使用JavaScript从动态滚动列表中获取所有元素?

问题描述 投票:-3回答:1

就像标题所说的,如何从滚动div中获取所有元素? 滚动列表中的元素是动态加载和销毁的。

我试图从此网站检索所有课程名称:https://public.enroll.wisc.edu/search?term=1204

下面的代码只能使用一次:

let list = document.getElementsByClassName('md-virtual-repeat-scroller')[0]
let childs = document.getElementsByClassName("result__name")
console.log(childs[0].innerText)

但是,如果这样做,我将获得10次相同的结果:

let list = document.getElementsByClassName('md-virtual-repeat-scroller')[0]
for(let i = 0; i < 10; i++) {
    let childs = document.getElementsByClassName("result__name")
    for(let j = 0; j < childs.length; j++) {
        console.log(childs[j].innerText) 
    }
    // scroll by 1000px every time
    list.scrollBy(0, 1000) 
}

我不知道出了什么问题。是因为scrollBy()可以asynchronously工作吗?但是我试图使用异步并等待。它仍然不起作用。

javascript node.js web-crawler single-page-application puppeteer
1个回答
0
投票

以尽可能少的文字提供更多信息。例如,许多问题可能与浏览器及其版本有关。这个脚本怎么称呼?您是否通过浏览器控制台发出命令?您是否已完成该站点的副本并对其进行了一些修改?很难从现实的角度理解问题。

提示:避免使用innerText。它速度较慢,并且在许多浏览器中受支持仅是为了兼容写入旧版本IE的脚本。 (我不知道为什么互联网上如此众多的示例将其作为首选)。用户textContent代替。

测试函数/方法的返回值总是好的,特别是在程序开发期间。

切勿向StackOverFlow社区(及其他任何组织)要求为您编写程序!

您质疑“我如何从滚动div中获取所有元素?”太“松散”了。滚动div?独立于“ div类型”(和标签!)的答案可以在下面找到。

您的代码似乎无济于事。为什么从0迭代到10?

看看这个片段。我认为它将为您提供帮助

const list = document.getElementsByClassName('md-virtual-repeat-scroller')[0];// if there is no intention to reassign it. Use [0] if you are sure it's the first element of this collection
let childs = list.getElementsByClassName("result__name"); // get only elements inside the first element!

使用变量的迭代器。

for(item of childs) 
{
 /*code*/ 
}

我相信您会实现您的目标!

而且绝不建议我们(社区)为您编码甚至解决您的问题。听起来很进取!对你也是!我确定。

© www.soinside.com 2019 - 2024. All rights reserved.