我正在尝试抓取下面的所有评论;
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();
}
})();
但结果返回空,不知道我做错了什么。
[
{}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}
]
答案 0 :(得分:0)
不幸的是,page.evaluate()
只能传输可序列化的值(粗略地说,JSON 可以处理的值)。由于 document.querySelectorAll()
返回一组不可序列化的 DOM 元素(它们包含方法和循环引用),因此集合中的每个元素都被替换为一个空对象。您需要返回可序列化的值(例如,文本或属性数组)或使用诸如 page.$$(selector)
和 ElementHandle
API 之类的东西。