gpt4 book ai didi

javascript - 使用 puppeteer 循环浏览帖子并捕获数据

转载 作者:行者123 更新时间:2023-12-02 22:15:58 32 4
gpt4 key购买 nike

我已在我的 Facebook 市场个人资料中设置了 puppeteer。最终,我希望 puppeteer 打开我列出的每个项目,然后捕获名称、价格、发布日期、描述、 View 的数据,然后将这些信息推送到数组中。太多的问题困扰着我。第一个是我创建的用于打开项目描述的代码当前仅打开我列出的每个项目的第一个项目。如何动态更改索引号以循环遍历其他项目?这是我的代码:

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);
})

最佳答案

如果我是你,我会稍微解释一下我的代码,请记住,我们不熟悉 facebook html 结构,并且不知道你的代码通过查看它来做什么......所以这是一个通用答案

// capture all the items
let elements = await page.$$('.item');
// loop trough items
for (let i = 0; i < elements.length; i++) {

// if you need to capture element and/or its text inside item
let data_elemtn = await elements[i].$('.item-data');
let data_elemtn_text = await page.evaluate(el => el.innerText, data_elemtn);

// capture and click the popup button
let button = await elements[i].$('.popup-button');
await button.click();

// wait for the popup to show up
await page.waitForSelector('.popup-element' , { visible: true , timeout: 0 });

// capture data inside popup and close it

}

关于javascript - 使用 puppeteer 循环浏览帖子并捕获数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385364/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com