Кукловод: Взаимодействия периодически не работают на новых вкладках - PullRequest
0 голосов
/ 10 сентября 2018

Использование 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, которые не связаны с внутренними страницами, такие как перезагрузка и закрытие, работают нормально.Я предполагаю, что что-то на странице нарушает способность кукловодов работать в доме.Я ничего не могу с этим поделать, но ...

Есть ли какой-нибудь способ предотвратить или восстановить такой сбой?

Я пробовал все это очевидное, как ожидание, перезагрузка, повторная загрузка вкладкии т. д. Также может подтвердить то же поведение в Windows и Linux, Headless или Headed, dev-инструменты, не dev-инструменты.Используя инструменты dev на вкладке сбой, я могу подтвердить, что страница работает, а селекторы / код работают одновременно на вкладке сбоя.

У кого-нибудь еще была эта проблема?(Если это так, возможно, стоит открыть номер)

...