循环在 nodejs puppeteer 脚本中不起作用

Loop not working in nodejs puppeteer script

nodejs 和 puppeteer 的新手。我正在尝试在 public 县 属性 值搜索中遍历一些街道名称。但是,我看不出我做错了什么。在我尝试做一个街道名称循环之前,我已经为一个单独的街道名称工作了。为了保护起见,我已经替换了街道名称。

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

我看到您在循环中定义了函数,但没有调用该函数

  1. 您忘记调用(在其后添加 ())定义的异步函数。
  2. 打开浏览器一次然后在其页面上重复使用会更有效率。为此,您可以将循环放在异步函数中。
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);
})();