首页 > 解决方案 > 如何在 forEach 循环中使用 Puppeteer 的 page.click?

问题描述

我想让Puppeteer根据名为的数组中的项目数单击一些选项卡tabs

;(async () => {
  const browser = await puppeteer.launch({
    headless: true
  })   

  const page = await browser.newPage()
  await page.goto(`https://www.example.com`)

  const tabs = ['tab1', 'tab2', 'tab3']

  tabs.forEach((tab, index) => {
    await page.click(`.postab-container li:nth-of-type(${ index + 1 }) a`)
  })
})()

但我得到这个错误:

await page.click(`.postab-container li:nth-of-type(${ index + 1 }) a`)
      ^^^^

SyntaxError: Unexpected identifier

好像forEach声明搞砸了page

这样做的正确方法是什么?

标签: javascriptnode.jspuppeteer

解决方案


forEach 内部的函数不是async函数,因此您不能使用await,但即使将其更改为async函数,您也不会得到预期的结果(forEach 将一次生成所有请求,而不是awaiteach async function)。请改用 for 循环。

  for(let index =0;index<tabs.length;++index){
    let tab = tabs[index];
    await page.click(`.postab-container li:nth-of-type(${ index + 1 }) a`)
  }

推荐阅读