electron 同时检查两个语句

xmd2e60i  于 2022-12-08  发布在  Electron
关注(0)|答案(1)|浏览(160)

创意:

我正在建立一个机器人登录Instagram使用puppeteer
如果登录成功,则不会发生任何事情。当出现ID为slfErrorAlert的错误时,bot会停止(因为登录不成功)。

问题:

按下登录按钮后,将检查第一条语句,之后检查第二条语句。
但是,应同时检查其中一个陈述是否正确。
这可能是伪代码:
If (Login == true) continue;
else if (slfErrorAlert == visible) stop;

目前的程式码片段

if ((await instagram.page.url() !== loginURL) || (await instagram.page.waitForSelector('#slfErrorAlert'))) {
    if (await instagram.page.url() !== loginURL) {
        log.info("LogIn successfull")
        log.info(instagram.page.url())
    }
    if (await instagram.page.waitForSelector('#slfErrorAlert')) {
        let loginMessage = await instagram.page.$eval('#slfErrorAlert', element => element.innerHTML)
        log.warn(`Client error - LogIn not possible: '${loginMessage}'`)
        await instagram.browser.close()
        return
    }
}

完整代码如下:https://github.com/JueK3y/Instagram-automated-commenting/blob/main/public/src/js/instagram.js

htzpubme

htzpubme1#

如果我没理解错的话,你想同时测试两个异步调用,你可以用函数Promise.race来实现。

let promise1 = instagram.page.url();
let promise2 = instagram.page.waitForSelector('#slfErrorAlert');

Promise.race([promise1, promise2]).then((result) => {
  // do your checks here, either of the 2 promises was resolved
  // the result is either the one return from the first or second promise
})

有关如何使用它的详细说明和扩展示例,请参见MDN web docs: Promise.race()

相关问题