javascript - 如何使用 JavaScript 从动态滚动列表中获取所有元素?
问题描述
就像标题所说,我如何从滚动 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()异步工作吗?但我尝试使用异步和等待。它仍然不起作用。
解决方案
尽可能用更少的话提供更多信息。例如,许多问题可能与浏览器及其版本有关。这个脚本是怎么调用的?您是否通过浏览器控制台发出命令?您是否复制了该站点并对其进行了一些修改?在现实层面上很难理解这个问题。
提示:避免使用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 variable!
使用变量的迭代器。
for(item of childs)
{
/*code*/
}
我相信你会实现你的目标!
永远不要建议我们(社区)为您编写代码,甚至解决您的问题。这听起来非常激进!也给你!我确定。
推荐阅读
- ansible - 循环中的多个不同命令
- c# - 如何让用户角色检查它是什么?
- python - 无法从 PySpark 写入文件(.csv、.parquet)
- rest - 内部错误 (500) 是否应该成为 Swagger API 文档的一部分?
- c# - 如果我按下键盘按钮,是否有*短代码*让球(玩家)跳跃?
- java - Future 和 Mono 之间的区别
- docker - 如何在阻止整个互联网的同时让 docker 容器公开端口?
- xamarin - 使用 Xamarin.UITest 测试我的 Xamarin.Forms iOS 应用程序:第一个测试总是失败
- sql-server - 如何将 if then 语句与 select 语句嵌套,包括其他 if then 语句?
- javascript - 自动选择下一个输入字段并返回