javascript - 获取所有无序列表元素及其文本 - puppeteer
问题描述
我正在尝试检索无序列表及其中的所有元素。<ul>
带有城市名称的<li>
文本,我想得到这些城市。
await page
.$eval(
"body > div.page > div.container.account.cf > div.account-content > div.addressPage > div.addressCard.addAddressCard > div:nth-child(6) > ul",
(ul) => {
console.log(ul.innerHTML);
for (let i = 0; i < ul.children.length; i++) {
cityArray.push(ul.children[i].textContent);
}
}
)
.then((array) => console.log(array))
.catch((err) => console.log(err));
当我尝试使用时console.log
,什么都没有打印出来。
解决方案
console.log
不起作用,因为在pageFunction
浏览器上下文中评估,所以你需要在浏览器中观察控制台输出。
作为替代方案,您可以将内部 HTML 保存在函数外部并记录它:
const ulHtml = '';
await page.$eval(
"body > div.page > div.container.account.cf > div.account-content > div.addressPage > div.addressCard.addAddressCard > div:nth-child(6) > ul",
(ul) => {
ulHtml = ul.innerHTML;
}
);
关于您的标题问题:.innerHTML
没有返回 Array[],因此您不能将其保存在这样的数组中。要获得一个包含每个文本的数组,<li>
只需在pageFunction
:
await page.$eval(
"body > div.page > div.container.account.cf > div.account-content > div.addressPage > div.addressCard.addAddressCard > div:nth-child(6) > ul",
(ul) => {
const cityArray = [];
for (let i = 0; i < ul.children.length; i++) {
cityArray.push(ul.children[i].textContent);
}
return cityArray;
}
).then((cityArray) => { console.log(cityArray) });
推荐阅读
- node.js - 使用 node.js 监听特定 URL 的请求(不是 LOCALHOST)
- php - MYSQLi 创建数据库?作为名字
- android - 我怎样才能在android中保持“在线”状态
- cron - 如何使用 cronjob 删除空文件夹和子文件夹
- excel - 如何在条形图上添加数据标签并使用 VBA 从单元格中添加值
- mysql - sql查询密码列
- salesforce - Visualforce 页面弹出窗口
- typescript - 我试图装饰的类的实例中缺少 TypeScript 报告属性
- python-3.x - 为什么 python shell 不显示埃塞俄比亚字符?
- symfony - 如何包含呈现表单的属性“类”