javascript – puppeteer:我如何等待ajax请求并处理结果

所以我打开一个网站,为所有重定向做完捕获验证码图像并将其发送给用户并将其发送给用户并重新输入打印的验证码

    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();

    await page.goto('http://localhost/p1.PHP' );
    await page.waitForNavigation();

    const captcha_image = await page.$eval('#security', e => e.getAttribute('src'));

    io.emit('send_captcha_to_client' , {text : captcha_image });

    var captcha = await captchaPromise;

在我重新获得capthca的类型值后,我将它放在字段中并单击登录按钮

    await page.$eval('#W_CAPTCHA', (el , _captcha) => el.value = _captcha.W_CAPTCHA , captcha );

    await page.click('#login-btn');

现在点击按钮后,ajax请求将被发送到服务器,让我们说http://example.com/login.PHP …如果验证码是正确的,我将被重定向到我的仪表板但是如果ajax调用返回让我们说{status:er}

并且有< span id =“alert”>< / span>在页面中它会添加.Error类并将错误文本放在那里…我如何拦截ajax调用并检查登录是否成功?

我可以cehck ajax调用的结果或等待并检查文档div.Error但不知道我怎么能做任何这些…这是我失败的尝试!

await page.waitForNavigation();

page.waitForSelector('.Error');
const error  = await page.$eval('.Error', e => e.value );

console.log(error);

browser.close();

解决方法:

您可以同时等待并处理先发生的事件:

await Promise.race([
  page.waitForNavigation({ waitUntil: "networkidle0" }),
  page.waitForSelector(".Error")
]);

if (await page.$(".Error")) {
  // there was an error
} else {
  // the page changed
}

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...