在Puppeteer的实例中运行循环

时间:2018-02-06 23:07:25

标签: node.js loops google-chrome puppeteer

刚开始使用Puppeteer,我可以启动浏览器,转到网址,运行一系列操作,然后关闭浏览器。我想看看我能做什么,但是打开浏览器并在同一个会话中循环一系列动作。

我有一个JSON对象,我想要访问的网址,所以想要遍历那个

// teams.js
module.exports = {
  premier_league: [
    { team_name: "Team 1", url: "https://url-of-site/team_1"},
    { team_name: "Team 2", url: "https://url-of-site/team_2"}
  ]
}

启动puppeteer的脚本如下

// index.js
const TEAM = require('./teams');
const puppeteer = require('puppeteer');

(async () => {
  // Initialise Browser
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.setViewport({
    width: 1280,
    height: 800
  });
  await page.goto('login page');

  await page.click('login_box');
  await page.keyboard.type('username');

  await page.click('login_password');
  await page.keyboard.type('password');

  await page.click('login_button');
  await page.waitForNavigation();

  // Go To Team URL
  await page.goto('Team URL')

  await browser.close();
})();

因此,要遍历我的JSON对象,我可以使用

Object.keys(TEAM['premier_league']).forEach(function(key) {

  // Output url of each team
  console.log(TEAM['premier_league'][key]['url'])

});

如果我使用循环将go转到url,则无法再访问page

// index.js
const TEAM = require('./teams');
const puppeteer = require('puppeteer');

(async () => {
  // Initialise Browser
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.setViewport({
    width: 1280,
    height: 800
  });
  await page.goto('login page');

  await page.click('login_box');
  await page.keyboard.type('username');

  await page.click('login_password');
  await page.keyboard.type('password');

  await page.click('login_button');
  await page.waitForNavigation();

  Object.keys(TEAM['premier_league']).forEach(function(key) {

    // Go To Team URL
    await page.goto(TEAM['premier_league'][key]['url'])

  });

  await browser.close();
})();

实际错误是

await page.goto(TEAM[args][key]['url'])
    ^^^^

SyntaxError: Unexpected identifier

1 个答案:

答案 0 :(得分:1)

你的ConcurrentModificationException回调函数也需要使用异步才能在内部使用await。尝试更改如下

Object.keys

希望有所帮助