【发布时间】:2020-11-01 06:27:41
【问题描述】:
网页有一个按钮,puppeteer 必须在按钮变得可见时尽快单击该按钮。这个按钮并不总是可见的,它同时对每个人都可见。所以我必须不断刷新才能发现该按钮变得可见。为此,我在下面编写了该脚本:
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox']
});
const page = await browser.newPage()
await page.setViewport({ width: 1920, height: 1080})
//I am calling my pageRefresher method here
async function pageRefresher(page,browser, url) {
try {
await page.goto(url, {waitUntil: 'networkidle2'})
try {
await page.waitForSelector('#ourButton', {timeout: 10});
await page.click('#ourButton')
console.log(`clicked!`)
await browser.close()
} catch (error) {
console.log('catch2 ' + counter + ' ' + error)
counter += 1
await pageRefresher(page, browser, url)
}
}catch (error) {
console.log('catch3' + error)
await browser.close();
}
}
如您所见,我的方法是递归的。它转到那个页面并寻找那个按钮。如果没有按钮,则它会再次调用自身以重做相同的工作,直到找到并单击该按钮。
实际上它现在运行良好。但它很慢。我正在运行此脚本,同时我在我的桌面 chrome 上打开同一页面,并且我开始手动刷新该页面。而且我总是在获胜,我总是在木偶师之前点击那个按钮。
我怎样才能加快这个过程?脚本不应该输给只有手动控制(如 F5 按钮)的人。
【问题讨论】:
-
使用递归是循环的不良替代品。如果递归调用过多,您可能会导致程序崩溃。
标签: javascript node.js puppeteer