cinemafunk
cinemafunk

Reputation: 73

Loop not working in nodejs puppeteer script

New to nodejs and puppeteer. I'm trying to loop through some street names in a public county property value search. However, I cannot see what I'm doing wrong. I've had this working for a individual street name before I attempted to do a loop of street names. I've replaced the street names for protection.

const puppeteer = require('puppeteer');

var street_names = ["street1","street2","street3"]

for (var i = 0; i < street_names.length;i++) {

//    console.log(street_names[i]); // Used to test if the loop works.

        (async () => {
          const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
          const page = await browser.newPage();
                await page.setViewport({ width: 1920, height: 1080 });
                await page.setDefaultNavigationTimeout(0);

                  // Property Search Page
                        await page.goto('http://propaccess.traviscad.org/clientdb/PropertySearch.aspx?cid=1', {waitUntil: 'domcontentloaded'});

                  //type the enter street
                        await page.select('select[name="propertySearchOptions:recordsPerPage"]', '250'); // Select 250 results per page
                        await page.screenshot({path: 'screenshot.jpg', fullPage: true});
                        await page.focus('#propertySearchOptions_streetName');
                        await page.type('input[name="propertySearchOptions:streetName"]',street_names[i]);
                        //await page.keyboard.type('street_names[i]');
                        await page.click('#propertySearchOptions_searchAdv');

                // Enter Results Page
                        await page.screenshot({path: 'street_names[i]_screenshot.jpg', fullPage: true});
                        await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', downloadPath: './results'});
                        await page.waitForSelector('#footer');
                        await page.click('#propertySearchResults_exportResults');
                        await page.waitForTimeout (3500);
                        await page.screenshot({path: 'screenshot.jpg', fullPage: true});


  await browser.close();
  process.exit(1);
        });
}

Upvotes: 0

Views: 1025

Answers (2)

vsemozhebuty
vsemozhebuty

Reputation: 13782

  1. You forgot to call (to add () after) the defined async function.
  2. It would be more efficient to open the browser once and then reuse it with its page. To do so, you can place the loop inside the async function.
const puppeteer = require('puppeteer');

var street_names = ["street1","street2","street3"]

(async () => {
  const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
  const page = await browser.newPage();
  await page.setViewport({ width: 1920, height: 1080 });
  await page.setDefaultNavigationTimeout(0);

  for (var i = 0; i < street_names.length;i++) {
    // console.log(street_names[i]); // Used to test if the loop works.

    // Property Search Page
          await page.goto('http://propaccess.traviscad.org/clientdb/PropertySearch.aspx?cid=1', {waitUntil: 'domcontentloaded'});

    // type the enter street
          await page.select('select[name="propertySearchOptions:recordsPerPage"]', '250'); // Select 250 results per page
          await page.screenshot({path: 'screenshot.jpg', fullPage: true});
          await page.focus('#propertySearchOptions_streetName');
          await page.type('input[name="propertySearchOptions:streetName"]',street_names[i]);
          //await page.keyboard.type('street_names[i]');
          await page.click('#propertySearchOptions_searchAdv');

    // Enter Results Page
          await page.screenshot({path: 'street_names[i]_screenshot.jpg', fullPage: true});
          await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', downloadPath: './results'});
          await page.waitForSelector('#footer');
          await page.click('#propertySearchResults_exportResults');
          await page.waitForTimeout (3500);
          await page.screenshot({path: 'screenshot.jpg', fullPage: true});
  }

  await browser.close();
  process.exit(1);
})();

Upvotes: 2

Alexander Elgin
Alexander Elgin

Reputation: 6956

I see that you defined the function inside the loop but you do not call the function

Upvotes: 2

Related Questions