木偶:间歇性互动在新标签上不起作用

时间:2018-09-10 19:48:01

标签: web-scraping puppeteer google-chrome-headless

使用Puppeteer触发列表中的链接,每个打开一个新选项卡都会完成一些工作,将其关闭然后移至下一个。间歇性(可能随机)的页面交互和评估停止工作。该故障大约90%的时间发生,并且似乎与任何特定列表项都不相关。在一次运行中失败的项目有时在另一次运行中有效。 示例:

  await page.goto(url)
  await page.evaluate(id => {
    redirectNewTab(id)
  }, id)
  let pages = await browser.pages()
  let newPage = pages[pages.length - 1]
  try {
    await doPageWork(newPage)
    await newPage.close()
  } catch {
    console.log('failed, moving on')
    await newPage.close()
  }
}

const doPageWork = async newPage => {
  try {
    try {
      //Doesn't work
      await newPage.click(SELECTOR)
      //Nope
      await newPage.click('#literallyanything')
    } catch {
      try {
        //Works
        await newestPage.reload()
        //Still doesn't work
        await newPage.click(SELECTOR)
        //Doesn't work either
        await newPage.evaluate(SELECTOR => {
          document.querySelector(SELECTOR).click()
          console.log('this wont show up in the dev tools console')
        }, SELECTOR)
      } catch {
        throw 'Selectors not working on page'
      }
    }
  } catch {
    throw 'Selector fail'
  }
}

redirectNewTab()是页面中的一个函数,可通过js打开选项卡,由于种种原因,这是唯一的方法。 api的不涉及页面内部的部分,例如重新加载和关闭工作正常。我猜想页面上的某些内容正在破坏木偶戏在dom中工作的能力。我对此无能为力,但是...

有什么方法可以防止此类故障或从中恢复吗?

我已经尝试了所有显而易见的方法,例如等待,重新加载,重新获取标签等。 也可以在Windows和Linux上确认相同的行为,Headless或Headed,开发工具,没有开发工具。使用失败选项卡中的开发工具,我可以确认页面正在运行并且选择器/代码在失败选项卡中同时工作。

还有其他人遇到过这个问题吗? (如果是这样,则值得提出一个问题)

0 个答案:

没有答案