【问题标题】:page.waitForFunction not working as expected - npm puppeteerpage.waitForFunction 没有按预期工作 - npm puppeteer
【发布时间】:2021-12-13 03:24:05
【问题描述】:

我的脚本中有 2 个函数要等待

    // Wait for message to show up
    page.waitForFunction("document.querySelector('div#message').textContent.includes('string inside message')")
        .then(() => {
            return res.status(404).json({ success: true, data: null, message: 'Message' });
        });

    // Wait for result to show up after clicking some button
    page.waitForSelector('.result', {
            timeout: 180000,
            visible: true,
        })
        .then(() => {});

不知何故,waitForFunction 函数从未运行return res.status(404),即使我看到显示的消息并在浏览器控制台中检查该函数。它返回了true

如果消息出现,结果将不会出现。 如果结果出现,则消息不会出现。

我怎样才能做到这一点?

【问题讨论】:

    标签: node.js rest npm puppeteer


    【解决方案1】:

    试试这个:

    fn="document.querySelector('div#message').textContent.includes('string inside message')"
    
    await page.waitForFunction(fn, {timeout: 2000});
    const result = await page.evaluate(fn)
    
    if (result===true)
        return res.status(404).json({ success: true, data: null, message: 'Message' });
    

    ps。您需要更改您的快递功能:async functionasync () =>

    编辑:

    await page.waitForFunction('func...', {timeout: 2000});

    【讨论】:

    • 问题是div#message在开始时没有值,它运行了一些计算然后返回消息。在这里,我希望 puppeteer 等待 2 个事件,第一个事件返回值是我的 API 响应,然后处理另一个。
    • 我不明白你到底需要什么。目前您的代码是非阻塞代码,因此第一个承诺的结果(返回 res.status (404) 等 ...)很可能永远不会被执行。我稍微改变了答案:它等待 2 秒让 fn 变为真。如果为真,则返回 404,否则继续执行
    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2018-11-19
    • 2020-01-22
    • 1970-01-01
    • 2020-09-01
    • 2021-10-19
    • 2020-03-18
    相关资源
    最近更新 更多