【问题标题】:How to iterate async function in puppeteer with NodeJS如何使用 NodeJS 在 puppeteer 中迭代异步函数
【发布时间】:2019-03-31 15:40:29
【问题描述】:

我想用 puppeteer 截屏,它正在为一个帖子工作。但我想让它迭代。

如果是普通函数,我可以在代码的最后一面写函数名,以便它可以迭代。但这是异步函数,所以我不知道如何迭代它。

const puppeteer = require('puppeteer');

let postNumber = 1;
let by;

(async () => {
    const browser = await puppeteer.launch({
        executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
        userDataDir: 'C:\\Users\\{computerName}\\AppData\\Local\\Google\\Chrome\\User Data',
        headless: false
    }); // default is true
    const page = await browser.newPage();
    await page.goto(`https://band.us/band/{someNumbers}/post/${postNumber}`, {
        waitUntil: 'networkidle2'
    });
    let element = await page.$('.boardList');
    by = await page.evaluate(() => document.getElementsByClassName('text')[0].textContent);
    console.log(by);

    await element.screenshot({
        path: `./image/${postNumber}-${by}.png`
    });
    console.log(`SAVED : ${postNumber}-${by}.png`)
    postNumber++;
    await browser.close();
})();

函数完成后,postNumber 变量应该加一。然后通过新的 URL 再次运行代码。

【问题讨论】:

    标签: javascript node.js async-await puppeteer


    【解决方案1】:

    当您想要一次又一次地运行代码时,可以使用普通的 for(或 while)循环。 async/await 代码适用于这些。

    您可以像这样在您的情况下使用 for:

    (async () => {
        const browser = await puppeteer.launch(/* ... */);
        const page = await browser.newPage();
    
        for (let postNumber = 1; postNumber < 10; postNumber++) {
            await page.goto(/* ... */);
            let element = await page.$('.boardList');
            // ...
        }
    
        await browser.close();
    })();
    

    【讨论】:

      【解决方案2】:

      你可以使用任何合适的循环,比如while-loop:

      'use strict';
      
      const puppeteer = require('puppeteer');
      
      (async () => {
          const browser = await puppeteer.launch({
              executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
              userDataDir: 'C:\\Users\\{computerName}\\AppData\\Local\\Google\\Chrome\\User Data',
              headless: false
          }); // default is true
          const page = await browser.newPage();
      
          let postNumber = 1;
          while (postNumber <= 10) {
            await page.goto(`https://band.us/band/{someNumbers}/post/${postNumber}`, {
                waitUntil: 'networkidle2'
            });
            const element = await page.$('.boardList');
            const by = await page.evaluate(() => document.getElementsByClassName('text')[0].textContent);
            console.log(by);
      
            await element.screenshot({
                path: `./image/${postNumber}-${by}.png`
            });
            console.log(`SAVED : ${postNumber}-${by}.png`)
            postNumber++;
          }
      
          await browser.close();
      })();
      

      【讨论】:

        猜你喜欢
        • 2016-03-17
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        相关资源
        最近更新 更多