首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >木偶师只从URL数组中获得第一项。

木偶师只从URL数组中获得第一项。
EN

Stack Overflow用户
提问于 2021-03-23 20:10:51
回答 1查看 67关注 0票数 1

我想从arrayUrl输入每个URL,得到价格并移到下一个,问题是:我不能得到超过一个项目,它总是返回第一个产品的价格,索引0,或者1,2.如果我手动更改为for(let i = "Number"; i<2; i++),它会认为我的循环中断了,但我不知道如何修复它。

代码语言:javascript
复制
let manufacturers = [2]
// 'Norton', 'Vonder', 'Bosch', 'black+decker', 'Dewalt', 'Stanley', 'Makita', 'Gedore', '3m&common_filter[2012]=2082', 'Dremel', 'Toyama', 'Minipa'] (Ignore)
let lastpage = [3]
// , 15, 4, 3, 5, 6, 14, 2, 2, 2, 3, 2] //Tem que botar um número acima (Ignore)
var scrape = async () => {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    page.setDefaultNavigationTimeout(0);
    results = await getProducts(page)
    return results
}
async function getProducts(page) {
    var arrayUrl = await (ConcatUrls(page))
    products = []
    for(let i = 0; i < 2; i++) { //i<2 Just to limit to 2 products per page, for testing purpose
    await page.goto(arrayUrl[i])
    return page.evaluate(() => {
    data = []
    price = document.querySelector('#valor-padrao-prod').getAttribute('value')
    data.push({price})
    return data
}
)}
    return products
}
async function ConcatUrls(page) {
    let urls = [];
    await page.goto('https://www.ferramentaskennedy.com.br/busca?marcas=99&q=vonder');
    for (let i = 0; i < manufacturers.length; i++) {
        var lastPageNumber = lastpage[i];
        for (let index = 1; index < lastPageNumber; index++) {
            await page.waitFor(1000);
            urls = urls.concat(await getUrl(page));
            if (index < lastPageNumber - 1) {
                await page.click('#app > div.categoria-produtos.pr-3.pl-3.p-md-0 > div.content > div > div > div.col-12.p-0 > ul > li:nth-child(8) > a');
            }
        }
    }
    return urls
}

async function getUrl(page) {
    await page.waitForSelector('#app > div.categoria-produtos.pr-3.pl-3.p-md-0 > div.content > div > div > div.col-12.p-0 > div > div > div > div.infos > div.title.mt-2.margin-card-sem-selo > h2');
    let url = await page.$$eval('#app > div.categoria-produtos.pr-3.pl-3.p-md-0 > div.content > div > div > div.col-12.p-0 > div > div > div > div.infos > div.title.mt-2.margin-card-sem-selo', links => {
    links = links.map(el => el.querySelector('h2 > a').href)
        return links;
    });
    return url
}

scrape().then((value) => {
    // console.log('Items scraped: ' + value.length);
    console.table(value);
})```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 07:14:38

问题似乎在这里(见评论):

代码语言:javascript
复制
async function getProducts(page) {
    var arrayUrl = await (ConcatUrls(page))
    products = []
    for(let i = 0; i < 2; i++) {
      await page.goto(arrayUrl[i])
      return page.evaluate(() => { // Breaks the loop and returns just the first result
        data = []
        price = document.querySelector('#valor-padrao-prod').getAttribute('value')
        data.push({price})
        return data
      })
    }
    return products // Not returned
}

也许你的意思是这样的:

代码语言:javascript
复制
async function getProducts(page) {
    var arrayUrl = await (ConcatUrls(page))
    products = []
    for(let i = 0; i < 2; i++) {
      await page.goto(arrayUrl[i])
      const price = await page.evaluate(() => {
        return document.querySelector('#valor-padrao-prod').getAttribute('value')
      })
      products.push({price})
    }
    return products
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66770609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档