Использование 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 на вкладке сбой, я могу подтвердить, что страница работает, а селекторы / код работают одновременно на вкладке сбоя.
У кого-нибудь еще была эта проблема?(Если это так, возможно, стоит открыть номер)