javascript - 试图用 puppeteer 抓取 Apple 评论,但它返回空
问题描述
我正在尝试抓取以下所有评论;
https://apps.apple.com/jp/app/mcdonalds-japan/id413618155?l=en#see-all/reviews
如果您可以看到评论被遮挡,那么您需要;
- 点击查看评论
- 滚动查看更多
我还有很长的路要走,但我已经尝试过这段代码;
import puppeteer from 'puppeteer';
const url = "https://apps.apple.com/jp/app/mcdonalds-japan/id413618155?l=en#see-all/reviews";
(async () => {
try {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto(
url,{
waitUntil: "domcontentloaded"
});
await page.waitForTimeout(4000);
let result = await page.evaluate(() => {
const items = Array.from(document.querySelectorAll("div"));
return items
})
console.log(result);
await browser.close();
} catch (e) {
console.error();
}
})();
但结果返回空,不知道我做错了什么。
[
{}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}
]
解决方案
不幸的是,page.evaluate()
只能传输可序列化的值(大致是 JSON 可以处理的值)。由于document.querySelectorAll()
返回不可序列化的 DOM 元素集合(它们包含方法和循环引用),集合中的每个元素都被替换为一个空对象。page.$$(selector)
您需要返回可序列化的值(例如,文本或属性数组)或使用类似ElementHandle
API。
推荐阅读
- c# - 使用 MongoDB c# 时出现错误 UpdateOne、ReplaceOne 和 DeleteMany
- php - WooCommerce 产品变体下拉列表的自定义 HTML
- linux - Bash 命令拒绝在后台运行 &
- android - Gradle 不会注意到对 build.gradle 所做的更改
- mysql - MySQL 根据查询结果更新
- python - 如何水平对齐绘图图表?
- plsql - 在pl/sql过程中实现水平碎片表
- python - 如果内容相同,则从列表中删除元素?
- vb.net - 以用户而非管理员身份启动流程
- regex - 如何编写 python 密码验证器