2

I want to take a screenshot with puppeteer and it's working for one post. But I want to make it iterate.

If it's normal function I can just wrote the function name in the last side of the code so that it can iterate. But this is async function so I don't know how to iterate it.

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

After the function is finished, the postNumber variable should be increase by one. And then run the code again by new URLs.

2 Answers 2

5

As you want to run the code one iteration after another, a normal for (or while) loop can be used. async/await code works fine with these.

You can use a for in your case like this:

(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();
})();
Sign up to request clarification or add additional context in comments.

Comments

1

You can use any appropriate loop, like 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();
})();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.