【发布时间】:2019-12-18 22:19:10
【问题描述】:
我已在我的 facebook 市场资料中设置了 puppeteer。最终,我希望 puppeteer 打开我列出的每个项目,然后捕获名称、价格、发布日期、描述、视图的数据,然后将这些信息推送到数组中。太多的问题困扰着我。第一个是我为打开项目描述而创建的代码,目前只打开我列出的每个项目的第一个项目。如何动态更改索引号以循环遍历其他项目?这是我的代码:
const moreDataClick = async (page) => {
let moreDataTrue = await page.evaluate(() => {
let furtherDataButtons = document.querySelectorAll(`span[title]`);
if(furtherDataButtons.length) {
let furtherDataButton = furtherDataButtons[num];
furtherDataButton.click();
return true;
}
return false;
});
if (moreDataTrue) {
await page.waitForSelector("button._3-9a._50zy._50-1._50z_._5upp._42ft");
await page.waitFor(5000)
await page.evaluate(() =>{
document.querySelector('button._3-9a._50zy._50-1._50z_._5upp._42ft').click();
});
}
await page.waitForFunction(`document.querySelectorAll('button._3-9a._50zy._50-1._50z_._5upp._42ft').length==0`);
}
await scrapeInfiniteScrollItems(page, 100);
console.log("scrolldown done...");
let moreDataButtonCounts = await page.evaluate(() => document.querySelectorAll('span[title]').length);
console.log("moreDataButtonsCount", moreDataButtonCounts);
for(let i = 0; i < moreDataButtonCounts; i++) {
await moreDataClick(page);
}
我的第二个问题是我不确定如何捕获数据,退出项目的弹出窗口,然后移动到下一个项目并捕获它的数据等。我不确定将这段代码放在哪里来捕获数据,并且不确定如何当数据捕获不是一次全部发生时,在我的代码末尾访问数组。这是我要插入的代码:
var facebookPostData = await page.evaluate(() => {
var title = document.querySelector('span[data-testid="marketplace_pdp_title"]').innerText;
var price = document.querySelector('._5_md._2iel').innerText;
var viewed = document.querySelector('._43kf._50f8').innerText.replace(/\D+/g, '');
var datePosted = document.querySelector('a._r3j[title]').title;
var description = document.querySelector('p._4etw').innerText;
var titleArray = [];
titleArray.push({
title: title,
price: price,
views: viewed,
date: datePosted,
desc: description
});
return titleArray;
console.log(titleArray);
})
【问题讨论】:
标签: javascript node.js puppeteer