使用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,开发工具,没有开发工具。使用失败选项卡中的开发工具,我可以确认页面正在运行并且选择器/代码在失败选项卡中同时工作。
还有其他人遇到过这个问题吗? (如果是这样,则值得提出一个问题)