javascript - 用户触发事件后解析 puppeteer 中的 page.evaluate()

标签 javascript puppeteer

我正在运行 page.evaluate() ,它必须返回我在页面上的输入字段中手动键入的内容。我编写了一段代码,我知道它不会工作,但它显示了其背后的意图:

let inputText = await page.evaluate(() => {
    // some non-automated process done by hand
    let sendButton = document.querySelector(".button");
    sendButton.addEventListener("click", () => {
        let text = document.querySelector(".input").value;
        return text;
    }, false);
    // wait for text?

});
console.log(inputText);

如何让 puppeteer 在 page.evaluate() 内等待我的事件触发,然后再将输入的文本返回到 Nodejs 上下文?

最佳答案

您不能让evaluate等待,但您可以使用exposeFunction注册回调函数。

await page.exposeFunction('processInput', inputText => console.log(inputText));

await page.evaluate(() => {
    // some non-automated process done by hand
    let sendButton = document.querySelector(".button");
    sendButton.addEventListener("click", () => {
        let text = document.querySelector(".input").value;

        processInput(text);

    }, false);
});

miyagisan评论了,这是个好主意,还可以返回一个 promise :

const inputText = await page.evaluate(() => { 
    return new Promise((resolve, reject) => { 
        let sendButton = document.querySelector(".button"); 
        sendButton.addEventListener("click", () => { 
            let text = document.querySelector(".input").value; 
            resolve(text); 
        }, false); 
    }); 
});

关于javascript - 用户触发事件后解析 puppeteer 中的 page.evaluate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811428/

相关文章:

javascript - 有没有一种传统的方法来记录 Jest/Puppeteer 测试套件?

javascript - 如何在 IE8 中触发自定义 javascript 事件?

javascript - 使用 JavaScript 提交后清除输入字段

google-chrome - 使用支持悬停的输入类型启动 headless Chrome

javascript - Puppeteer:按顺序操作页面的 DIV's/html 元素?

javascript - 在 Puppeteer 中获取 elementHandle 的兄弟

javascript - 对于 IE6 浏览器检测,某些非 IE 浏览器显示为 true

javascript - 谷歌地图中的 Bootstrap 模式不起作用

javascript - ASP.NET 独立的 javascript 目录结构

javascript - 为什么 puppeteer 在截屏时无法正确呈现此页面?