javascript - 学习 Javascript(木偶师)
问题描述
我试图学习在网络上做一些请求,使用 javascript 使用 puppeteer。
所以我终于从一个随机的网站上得到了一些 div 之后的标签 a 的值。
但我不知道如何将此代码放在“for”中以获取 10 个值(10 个连续标签)。
这就是我获得价值的方式(它的工作):
const resultado0 = await page.evaluate(() => {
return document.querySelectorAll('.ui.divided.list > a')[0].textContent;
});
console.log(`O valor é ${resultado0}`);
我如何尝试使用 for(不工作“ReferenceError:我未定义”):
for (var i = 0; i < 9; i++) {
const resultado = await page.evaluate(() => {
return document.querySelectorAll('.ui.divided.list > a')[i].textContent;
});
console.log(`O valor é ${resultado}`);
}
所以我不想重复相同的代码并输入([1],[2],[3],...),我该怎么做?
谢谢
编辑:忘记告诉我不能用 querySelectorAll 打印结果,它的返回未定义。前任:
const resultado = await page.evaluate(() => {
return document.querySelectorAll('.ui.divided.list > a').textContent;
});
console.log(`O valor é ${resultado[0]}`);
解决方案
您需要在 page.evaluate
(不同的上下文)内循环,即便如此,您会更容易通过Array::map
:
const resultado0 = await page.evaluate(() => {
// Get the elements as a DOM node list
const elements = document.querySelectorAll(".ui.divided.list > a");
// Convert to an array we can map over, then map over to get the text content.
return Array.from(elements).map((el) => el.textContent);
});
console.log(`O valor é ${resultado0}`);
推荐阅读
- design-patterns - 哪种类型的实现会更适合服务层?
- azure - Azure WebRole 粘性负载平衡
- kubernetes - istio-proxy 访问日志是什么意思?
- vb.net - 检查数组中每个文本框的标签
- android - Android:“发送到 SYSTEM 的 Binders 太多”是什么意思?
- python - (Python)如何在“实时”中将变量从 file1.py 传递到 file2.py?
- java - 通过在 java 中定期进行 Web 服务调用来更新 sqlite 数据库
- javascript - 为什么使用 jquery.find(":input") 添加动态输入时无法获取输入元素?
- git - 执行请求的更改而不是拉取请求的所有者
- git - git - 将分阶段的更改提交到另一个分支并合并